nodejs + express:Cors不是一个函数

时间:2017-11-20 11:35:39

标签: node.js typescript express cors

直到今天早上工作正常,现在,我突然收到类型错误,指出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上,这样做有点让我感到有些困惑,为什么我突然得到这个错误,可能是什么原因。

非常感谢任何帮助

3 个答案:

答案 0 :(得分:1)

你必须拥有诸如

之类的东西
const cors = require('cors');

位于文件顶部,然后将该模块称为cors,而不是Cors

答案 1 :(得分:0)

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

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

在我上面的问题中发布的代码中,import语句正在读取我的cors.json文件而不是(我认为)cors NPM包。

从这篇文章中吸取的教训应该让其他人犯同样的错误我刚才做的就是小心你的文件名称以及放置它们的位置!!!

答案 2 :(得分:0)

从“ cors”导入cors; 用这个。 对我来说一切正常