node.js - 如何从 Nodejs 服务器启用 CORS

标签 node.js reactjs preflight

我正在使用 React 将数据发送到我的 API。我发出的每个 POST 请求都会给我一个 OPTIONS 请求,我需要解决这个问题。我想我可能需要做一些预检结构,但读完后我仍然不知道如何实现它。

目前我正在连接到我的 API...

fetch('http://localhost:8080/login', {
        method: 'POST',
        mode:'cors',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            username: this.state.username,
            password: this.state.password
        })
    });

这称为onSubmit。我正在向我的 POST 请求发送一些数据,因此我假设我需要这些 header 。

现在,在我的 Node js 服务器 API 中,我有以下处理程序...

var responseHeaders = {  
    "access-control-allow-origin": "*",
    "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
    "access-control-allow-headers": "content-type, accept",
    "access-control-max-age": 10,
    "Content-Type": "application/json"
};

app.post('/login', function(req, res, next) {
    if (req.method == "OPTIONS") {
        res.writeHead(statusCode, responseHeaders);
        res.end();
    }
    console.log("hello");
   ...

这不起作用,但是,当我提出请求时,我得到...

OPTIONS /login 200 8.570 ms - 4

如果我删除 header ,POST 可以工作,但数据(用户名、密码)不会通过。

如何绕过此 OPTIONS 问题?

最佳答案

浏览器向服务器发送预检选项请求,以检查服务器上是否启用了 CORS。要在服务器端启用 cors,请将其添加到您的服务器代码中

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");
        next();
    });

关于node.js - 如何从 Nodejs 服务器启用 CORS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39990550/

相关文章:

Node.js 套接字同时发送和接收

node.js - 销毁数组中嵌套的对象

javascript - Mongoose 保存不正确的值

reactjs - 无限加载网格在错误的时间触发 loadMoreRows

reactjs - 在 React-Native 中定义静态 PropTypes 时 '.isRequired' 的含义

javascript - jQuery Ajax 问题在本地加载 XML - Safari 版本 11.0 - 错误 : XMLHttpRequest cannot load . xml。预检响应不成功

node.js - 我可以在 Heroku 上运行 .exe 文件吗?

javascript - React 状态从一个组件不一致地传递到下一个组件

security - 为什么对于标准内容类型的POST请求,CORS中没有预检

javascript - PouchDB 身份验证触发 CORS 预检请求