Nodejs/Express/Typescript 需要 module.exports

Posted

技术标签:

【中文标题】Nodejs/Express/Typescript 需要 module.exports【英文标题】:Nodejs/Express/Typescript require the module.exports 【发布时间】:2020-08-31 08:44:32 【问题描述】:

我正在尝试使用 Express 创建一个 Web 服务,它可以从 localhost 以及使用 Claudia 的 AWS Lambda 执行。

我想将应用配置和 app.listen 函数分开。

我的 app.ts 文件如下所示:

import express = require('express');
const dotenv = require('dotenv');

class App 

  public app: express.Application = express();

  constructor() 
    dotenv.config();

    // parse application/json request body to JSON Objects
    this.app.use(express.json());

    // parse x-ww-form-urlencoded request body to JSON Objects
    this.app.use(express.urlencoded( extended: true ));

    this.app.get('/', (req, res) => 
      res.send('API server is up and running');
    );
  


module.exports = new App().app

然后,我需要 local.ts 文件中的应用程序

const app = require('./app');

app.listen(process.env.PORT,
    () => console.log(`Application is running on port $process.env.PORT`)
);

我的 package.json 看起来像这样


  "name": "nodejs-express-lambda",
  "version": "1.0.0",
  "description": "",
  "main": "app.ts",
  "scripts": 
    "run": "npx ts-node local.ts",
    "build": "tsc"
  ,
  "author": "",
  "license": "ISC",
  "dependencies": 
    "@types/dotenv": "^8.2.0",
    "dotenv": "^8.2.0",
    "express": "^4.17.1"
  ,
  "devDependencies": 
    "@types/express": "^4.17.6",
    "@types/node": "^14.0.1",
    "claudia": "^5.12.0",
    "ts-node": "^8.10.1",
    "tslint": "^6.1.2",
    "typescript": "^3.9.2"
  

tsconfig.json


  "compilerOptions": 
      "module": "commonjs",
      "target": "ES6"
  ,
  "exclude": [
      "node_modules",
  ]

最后,运行npm run-script run 将返回

app.listen 不是函数

应用程序正在端口 3000 上运行

我试过import app = require('./app'),但也没有用。我对所有这些出口和进口有点迷茫,有人可以帮忙吗?

app.ts 运行 app.listen 效果很好。

【问题讨论】:

【参考方案1】:

我不确定这是否会有所帮助,但您可能想试试这个:

import express from 'express'
import dotenv from 'dotenv' // or just import 'dotenv/config'

class App 

  public app: express.Application = express();

  constructor() 
    dotenv.config();

    // parse application/json request body to JSON Objects
    this.app.use(express.json());

    // parse x-ww-form-urlencoded request body to JSON Objects
    this.app.use(express.urlencoded( extended: true ));

    this.app.get('/', (req, res) => 
      res.send('API server is up and running');
    );
  


const app = new App().app
export default app

在第二个文件中

import app from './app'

【讨论】:

以上是关于Nodejs/Express/Typescript 需要 module.exports的主要内容,如果未能解决你的问题,请参考以下文章

使用打字稿时nodemon不刷新