从API获取POST数据(节点js,反应)

我正在尝试对我的API进行POST请求。 处理程序目前看起来像这样…

app.post('/login', function(req, res, next) { console.log("here"); ... }); 

这个API托pipe在本地主机8080上。而且我正在提取数据。

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

我现在所传递的内容是无关紧要的,我只想做一个成功的POST请求。 当我提交表单时,它提取API,这是我在控制台上得到的消息…

 OPTIONS /login 200 8.177 ms - 4 

它看起来好像有什么工作,但它没有, console.log("here"); 永远不会被调用。

我相信我没有正确调用API。 如果我删除头,POST调用,但是我相信我需要这些头,因为它们是重要的数据传递到response 。 我该怎么办?

您可能正面临CORS权限问题。 如果您正在从任何主机(如本地文件系统)提供不同于正在运行的节点服务器的url的Web应用程序,则这将始终发生。 浏览器限制所有的ajax访问不完全匹配的协议,子域名,域名,甚至准确的端口。

您可以从节点服务器托pipe静态HTML / JS / CSS ,这可能会解决问题。 或者您可以尝试添加CORS权限到您的节点服务器。

基本上,在你的/login节点中添加如下的东西之前,假设你使用了express:

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

您可以阅读更多关于MDN或enable-cors.org上CORS访问限制的信息