【问题标题】:nodejs + express: Cors is not a functionnodejs + express:Cors 不是函数
【发布时间】:2018-05-03 14:51:14
【问题描述】:

直到今天早上一直工作正常,突然我收到一个类型错误,指出 Cors is not a function

我的代码

import * as Cors from "cors";
...

const corsOptions: Cors.CorsOptions = {
    allowedHeaders: ["Origin", "X-Requested-With", "Content-Type", "Accept", "X-Access-Token", "Authorization"],
    credentials: true,
    methods: "GET,HEAD,OPTIONS,PUT,PATCH,POST,DELETE",
    origin: "*",
    preflightContinue: true
};

createConnection(ormConfig).then(async connection => {
    // run pending migrations
    await connection.runMigrations();
    // create express server
    const app = express();
    app.use(bodyParser.json({limit: "50mb"}));
    app.use(bodyParser.urlencoded({limit: "50mb", extended: true}));
    // register cors
    app.use(Cors(corsOptions)); //<---error occurs here
    // register all controllers
    useExpressServer(app, {
        routePrefix: "/api",
        controllers: [
            __dirname + "/controllers/**/*{.js,.ts}"
        ],
        authorizationChecker: async (action: any, roles: string[]) => {
            return JwtAuthorizationMiddleware.checkIsAuthorized(action, roles);
        },
        currentUserChecker: async (actions: any) => {
            return JwtAuthorizationMiddleware.extractUserFromJwtToken(actions);
        }
    });

    // start the express server
    const port: number = +(process.env.PORT || 44320);
    app.listen(port, (err: Error) => {
        console.log(`App listening on port ${port}`);
        console.log("Press Ctrl+C to quit.");
    });
}).catch(error => console.error("TypeORM connection error: ", error));

cors 和 Node 的当前版本

cors: "^2.8.4"
Node: v8.4.0

最近所做的唯一更改是在星期五我包含以下软件包时

multer: "^1.3.0"
@google-cloud/datastore: "^1.1.0"
@google-cloud/storage: "^1.4.0"

直到今天早上一切正常,在 gcloud 上部署了相同的版本,并且这有效,所以我有点困惑为什么我突然收到这个错误以及可能是什么原因。

非常感谢任何帮助

【问题讨论】:

  • 您是否尝试过类似的方法:app.use(Cors.cors(corsOptions));。怀疑它是否有任何区别,但我假设 cors 可能是许多其他功能的一部分。
  • 我试过了,我什至试过rm -rf node_modules 然后重新安装包并得到同样的错误

标签: node.js typescript express cors


【解决方案1】:

你必须有一些东西,例如

const cors = require('cors');

在文件的顶部,然后将模块称为cors,而不是Cors

【讨论】:

    【解决方案2】:

    您可以阅读 Express 的 cors 文档以了解更多信息。

    要将 cors 应用于项目中的所有路由,您可以编写:

    var express = require('express')
    var cors = require('cors')
    var app = express()
    
    app.use(cors())
    

    【讨论】:

    • 欢迎来到 Stack Overflow!尝试更清楚地解释为什么这是问题的答案。
    【解决方案3】:

    好的,所以我发现问题原来是PEBKAC。

    在 gcloud 中实现文件上传和存储时,我必须在 gcloud 上启用 CORS,并将设置文件保存在项目的根目录中,该文件名为 cors.json

    在我上面的问题中发布的代码中,导入语句正在读取我的cors.json 文件,而不是(如我所想的)cors NPM 包。

    如果其他人犯了我刚刚犯的同样的菜鸟错误,从这个中吸取的教训是要小心你的文件命名和放置位置!!!

    【讨论】:

      猜你喜欢
      • 2017-09-04
      • 2020-07-12
      • 2020-07-14
      • 2017-11-22
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多