首页 > 解决方案 > 在nodejs中发出请求时跨域资源共享错误

问题描述

发出 put 请求时出现此错误。

从源“ http://localhost:3000 ”访问“ http://localhost:5000/api/products/undefined ”处的 XMLHttpRequest已被 CORS 策略阻止:Access-Control-Allow-Methods 不允许方法 PUT在预检响应中。

我什至在主服务器文件中包含了 CORS 策略

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*"); // update to match the domain you will make the request from
  res.header(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content-Type, Accept, Authorization",
    "Access-Control-Allow-Methods","GET, PUT, POST, OPTIONS"
  );
  next();
});

标签: javascriptcors

解决方案


看起来头函数一次应该只接收两个参数:

app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
    res.header("Access-Control-Allow-Methods", "GET, PUT, POST, OPTIONS");
    next();
});

有关如何在 ExpressJS 上启用 CORS 的更多详细信息,请参阅此参考: https ://enable-cors.org/server_expressjs.html

你可以使用一个 npm 包,这个包是一个中间件,安装它只需:

npm install cors

并使用它:

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

app.use(cors())

app.get('/products/:id', function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for all origins!'})
})

app.listen(80, function () {
  console.log('CORS-enabled web server listening on port 80')
})

有关如何使用 cors 包的详细信息,请参阅此文档:https ://expressjs.com/en/resources/middleware/cors.html


推荐阅读