node.js - TypeError:res.setHeader 不是函数,在启用 cors 时出现此错误
问题描述
I found many similar problems but couldn't resolve this
我的主要目标是从客户端发出 API 请求,通过它我可以将 JSON 文件发送到需要存储在数据库中的服务器,但是由于我的前端和后端托管在不同的域上,我需要启用 Cross -来源资源共享(CORS)。
为了启用 CORS,我使用了使用此处指定的选项配置 CORS的方法( https://stackabuse.com/handling-cors-with-node-js/)
这就是我从反应前端发送帖子请求的方式,这里是 apiUrl= http://localhost:${port}/apireact
;
fetch(apiUrl, {
method: 'POST',
body: JSON.stringify({name: "thunder"}),
})
.then(data => console.log(data))
.catch(err => console.error(err));
我的服务器端代码是这样的,
import Koa from "koa";
import next from "next";
import Router from "koa-router";
const cors = require('cors')
const originUrl=process.env.HOST; //HOST=https://<somenumber>.ngrok.io
const app = next({
dev,
});
app.prepare().then(async () => {
const server = new Koa();
const router = new Router();
/********CORS******************/
const corsOptions = {
origin: originUrl,
optionsSuccessStatus: 200, // For legacy browser support
methods: ['GET','POST']
}
server.use(cors(corsOptions));
router.post("/apireact",(req,res)=>{
res.json({
message: 'Hello World2'
});
});
/**************************/
server.use(router.allowedMethods());
server.use(router.routes());
server.listen(port, () => {
console.log(`> Ready on http://localhost:${port}`);
});
});
在正在运行的服务器上,我收到以下错误,
TypeError: res.setHeader is not a function
┃ at applyHeaders (C:\Users\Kulbhushan goswami\learning_site\my_email_app\node_modules\cors\lib\index.js:153:15)
┃ at applyHeaders (C:\Users\Kulbhushan goswami\learning_site\my_email_app\node_modules\cors\lib\index.js:149:11)
┃ at applyHeaders (C:\Users\Kulbhushan goswami\learning_site\my_email_app\node_modules\cors\lib\index.js:149:11)
┃ at cors (C:\Users\Kulbhushan goswami\learning_site\my_email_app\node_modules\cors\lib\index.js:187:7)
┃ at C:\Users\Kulbhushan goswami\learning_site\my_email_app\node_modules\cors\lib\index.js:224:17
┃ at originCallback (C:\Users\Kulbhushan goswami\learning_site\my_email_app\node_modules\cors\lib\index.js:214:15)
┃ at C:\Users\Kulbhushan goswami\learning_site\my_email_app\node_modules\cors\lib\index.js:219:13
┃ at optionsCallback (C:\Users\Kulbhushan goswami\learning_site\my_email_app\node_modules\cors\lib\index.js:199:9)
┃ at corsMiddleware (C:\Users\Kulbhushan goswami\learning_site\my_email_app\node_modules\cors\lib\index.js:204:7)
┃ at dispatch (C:\Users\Kulbhushan goswami\learning_site\my_email_app\node_modules\koa\node_modules\koa-compose\index.js:42:32)
┃ at C:\Users\Kulbhushan goswami\learning_site\my_email_app\node_modules\@shopify\koa-shopify-auth\dist\src\auth\index.js:111:51
┃ at step (C:\Users\Kulbhushan goswami\learning_site\my_email_app\node_modules\tslib\tslib.js:133:27)
┃ at Object.next (C:\Users\Kulbhushan goswami\learning_site\my_email_app\node_modules\tslib\tslib.js:114:57)
┃ at C:\Users\Kulbhushan goswami\learning_site\my_email_app\node_modules\tslib\tslib.js:107:75
┃ at new Promise (<anonymous>)
┃ at Object.__awaiter (C:\Users\Kulbhushan goswami\learning_site\my_email_app\node_modules\tslib\tslib.js:103:16)
┃ at shopifyAuth (C:\Users\Kulbhushan goswami\learning_site\my_email_app\node_modules\@shopify\koa-shopify-auth\dist\src\auth\index.js:40:24)
┃ at dispatch (C:\Users\Kulbhushan goswami\learning_site\my_email_app\node_modules\koa\node_modules\koa-compose\index.js:42:32)
┃ at C:\Users\Kulbhushan goswami\learning_site\my_email_app\node_modules\koa\node_modules\koa-compose\index.js:34:12
┃ at Application.handleRequest (C:\Users\Kulbhushan goswami\learning_site\my_email_app\node_modules\koa\lib\application.js:168:12)
┃ at Server.handleRequest (C:\Users\Kulbhushan goswami\learning_site\my_email_app\node_modules\koa\lib\application.js:150:19)
┃ at Server.emit (events.js:315:20)
请建议我该如何解决这个问题?
解决方案
从文档https://github.com/koajs/router/blob/master/API.md中,Koa 路由看起来像
router.get('/', (ctx, next) => {
});
在您的代码中,您将其用作
router.post("/apireact",(req,res)=>{
res.json({
message: 'Hello World2'
});
});
我猜这就是问题所在。
推荐阅读
- c++ - 需求跟踪 Doxygen
- asp.net-web-api - 有没有办法限制某些用户根据他们的组访问 SQL 表
- php - Laravel:如何在 Excel 导出中更改时间戳格式?
- elasticsearch - ElasticSearch 连接上的术语聚合
- if-statement - If...else 条件在 LUA 语言中
- php - 从 GMAIL SMTP 服务器使用 PHP 发送电子邮件/它不发送
- c - UB 是否将 void 指针与 C 中的类型化指针进行比较(是否相等)?
- json - 在 scala 端处理动态字段
- python - 来自 Django 模型的 AttributeError 继承了抽象基础模型
- javascript - “HTMLAttributes”类型上不存在属性“图标” - 为什么我不能注销这部分对象?