Skip to content
📈0️⃣

koa 安装 cors 后, 启动服务报错

bash
Server is running on http://localhost:13000
[nodemon] restarting due to changes...
[nodemon] starting `node app.js`
Server is running on http://localhost:13000

TypeError: res.setHeader is not a function
  at applyHeaders (D:\workspace\www.zichin.com\server\tongji\node_modules\cors\lib\index.js:153:15)
  at applyHeaders (D:\workspace\www.zichin.com\server\tongji\node_modules\cors\lib\index.js:149:11)
  at applyHeaders (D:\workspace\www.zichin.com\server\tongji\node_modules\cors\lib\index.js:149:11)
  at cors (D:\workspace\www.zichin.com\server\tongji\node_modules\cors\lib\index.js:171:7)
  at D:\workspace\www.zichin.com\server\tongji\node_modules\cors\lib\index.js:224:17
  at originCallback (D:\workspace\www.zichin.com\server\tongji\node_modules\cors\lib\index.js:214:15)
  at D:\workspace\www.zichin.com\server\tongji\node_modules\cors\lib\index.js:219:13
  at optionsCallback (D:\workspace\www.zichin.com\server\tongji\node_modules\cors\lib\index.js:199:9)
  at corsMiddleware (D:\workspace\www.zichin.com\server\tongji\node_modules\cors\lib\index.js:204:7)
  at dispatch (D:\workspace\www.zichin.com\server\tongji\node_modules\koa\node_modules\koa-compose\index.js:42:32)

解决方案

cors 中间件的版本可能不兼容 Koa,可以使用koa-cors

koa-cors

koa-cors 是一个用于 Koa 框架的中间件,用于处理跨域资源共享(CORS)问题。使用 koa-cors 可以方便地为你的 Koa 服务器添加 CORS 支持。以下是如何在 Koa 项目中使用 koa-cors 的步骤:

  1. 首先,安装 koa-cors
bash
npm install koa-cors
  1. 然后,在你的 Koa 项目中引入并使用 koa-cors 中间件:
javascript
const Koa = require("koa");
const cors = require("koa-cors");

const app = new Koa();

// 使用 koa-cors 中间件
app.use(
  cors({
    origin: "*", // 允许所有来源访问
    methods: ["GET", "POST", "PUT", "DELETE"], // 允许的请求方法
    allowedHeaders: ["Content-Type", "Authorization"], // 允许的请求头
    credentials: true, // 是否允许发送 Cookie
    maxAge: 86400, // 预检请求的有效期
  })
);

// 你的其他路由和中间件代码

app.listen(3000, () => {
  console.log("Server is running on port 3000");
});

在这个例子中,我们设置了 origin'*',这意味着允许所有来源的请求访问。你可以将其更改为特定的域名或域名列表,以限制允许访问的来源。

通过这种方式,你的 Koa 服务器就允许了跨域访问。如果你需要更细粒度的控制,可以查看 koa-cors 的文档,了解更多选项和配置。