Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用my node/express rest api服务器获取数据时阻止CORS_Javascript_Node.js_Express_Cors_Fetch - Fatal编程技术网

Javascript 使用my node/express rest api服务器获取数据时阻止CORS

Javascript 使用my node/express rest api服务器获取数据时阻止CORS,javascript,node.js,express,cors,fetch,Javascript,Node.js,Express,Cors,Fetch,我有一个正在运行的localhost node/express服务器,它应该允许任何带有某个主体的post请求,然后返回带有某个消息的相同主体。我已将cors节点包用于我的express中间件,以允许cors 但我在这里面临一个问题,我可以很容易地在系统中使用POSTMAN应用程序的post请求并获得输出,但当我尝试从其他域(如codepen、JSFIDLE)获取请求时,我会不断获得CORS阻止响应,即使我允许在节点服务器中进行跨源资源共享 以下是我所做的: 在我的服务器端express应用程序

我有一个正在运行的localhost node/express服务器,它应该允许任何带有某个主体的post请求,然后返回带有某个消息的相同主体。我已将cors节点包用于我的express中间件,以允许cors

但我在这里面临一个问题,我可以很容易地在系统中使用POSTMAN应用程序的post请求并获得输出,但当我尝试从其他域(如codepen、JSFIDLE)获取请求时,我会不断获得CORS阻止响应,即使我允许在节点服务器中进行跨源资源共享

以下是我所做的:

在我的服务器端express应用程序中:

const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');

const app = express();
app.use(cors({
  origin: "*",  //also tried: origin: "https://codepen.io"
  methods: "GET, POST, PUT, DELETE",
  allowedHeaders: 'Content-Type, Authorization'
}));

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());  // application/json

app.post('/post', (req, res, next) => {
    const title = req.body.title;
    const id = req.body.id;

    res.status(201).json({
        message: "POST request successful",
        resBody: {
            title: title,
            id: id
        }
    })
});

app.listen(4001);
对于我的客户端javascript获取代码:

const options = {
  method: 'POST',
  body: JSON.stringify({
    title: 'foo',
    id: 1
  }),
  headers: {
    'Content-Type': 'application/json'
  }
};

fetch('http://localhost:4001/post', options)
  .then((response) => {
    return response.json();
  })
  .then((jsonObject) => {
  console.log(jsonObject)
  })
  .catch((error) => {
    console.log(error);
  });
我在控制台中收到以下消息:

已阻止跨源请求:同一源策略不允许读取位于的远程资源。原因:CORS请求未成功

我知道这些类型的问题已经被回答了太多的时间了,但是我不明白为什么在允许我的服务器使用CORS后仍然会出现错误


请有人解释一下。

您是否试图在没有任何数据的情况下通过cors?因为我也有同样的问题,我只是通过传递app.usecors来修复它
默认情况下,它会打开任何原点,它一点也不安全,但它对我有效

你没有正确处理飞行前的情况。非简单请求(如您的请求)的contentType与默认值不同,必须发送预飞行,服务器必须对此作出响应。在服务器端或客户端,我必须在哪里处理它们?我该如何处理?你能解释一下吗?你已经很接近了,你只需要确保你在node.js中的CORS配置允许选项请求并正确响应它们。您正在使用的模块的文档应该解释如何操作。我也允许服务器进行选项请求,但仍然得到相同的错误。它是否与我的clent端代码有关?我不明白为什么会发生这种情况。客户端不需要更改。此外,如果我在获取请求中设置请求头“Content Type”:“text/plain”,我会获得连接ok201,但我看不到从服务器发送的数据。我认为问题在于内容类型application/json。有什么想法吗?