nodejs + express:Cors 不是函数
Posted
技术标签:
【中文标题】nodejs + express:Cors 不是函数【英文标题】:nodejs + express: Cors is not a function 【发布时间】: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
然后重新安装包并得到同样的错误
【参考方案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 包。
如果其他人犯了我刚刚犯的同样的菜鸟错误,从这个中吸取的教训是要小心你的文件命名和放置位置!!!
【讨论】:
以上是关于nodejs + express:Cors 不是函数的主要内容,如果未能解决你的问题,请参考以下文章
javascript NodeJs + Express中的CORS问题
本地主机上带有 Angular 的 NodeJS + Express:被 CORS 预检阻止
NodeJS + Express Cors + SocketIO = XMLHttpRequest 错误