设置Access-Control-Allow-Origin不适用于AJAX / Node.js

我一遍又一遍地面对同样的错误:

XMLHttpRequest cannot load http://localhost:3000/form. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8000' is therefore not allowed access. The response had HTTP status code 404. 

我读过类似这个post的无数post,他们几乎都有相同的答案,即添加以下设置: res.setHeader('Access-Control-Allow-Origin', '*') 。 这就是我一直在做的,但仍然无法正常工作。 我在localhost:8000(当一个btn被点击logsth()被调用)时给了一个angular.js应用程序,我的节点在localhost:3000上工作。 以下是他们的样子:

 app.controller('Contact', ['$scope', function($scope) { $scope.logsth = function(){ var datas = {'may':'4','june':'17'}; $.ajax({ url: 'http://localhost:3000/form', method: 'POST', crossDomain: true, data: datas }); }; }]); 

和我的节点:

 var express = require('express'); var router = express.Router(); var app = express(); app.use(function (req, res, next) { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); res.setHeader('Access-Control-Allow-Credentials', true); next(); }); app.post('/form', function(req, res){ console.log("e-mail sent"); res.send('yey'); }); module.exports = router; 

这里没有太多的代码,但现在我只是想摆脱错误。

编辑:当我使用app.use(…)和app.post(…)并转到localhost:3000 /窗体我得到404错误。 但是,当我使用router.use(…)和router.post(…)至less链接工作正常。 此外,没有“允许来源”错误,但我得到: POST http://localhost:3000/form 404 (Not Found) 。 但是,当我去http:// localhost:3000 /窗体它显示响应和console.log。 我应该把它作为路由器,而不是应用程序?

只留下这一行对我来说是个窍门:

 res.setHeader('Access-Control-Allow-Origin', '*'); 

更新:

您可以尝试从npm安装cors模块。

问题是你要返回通配符( *尝试传递凭据( res.setHeader('Access-Control-Allow-Credentials', true); )。 你不能两个。 如果您必须使用Access-Control-Allow-Credentials ,则需要明确Access-Control-Allow-Origin标头中Access-Control-Allow-Origin

所以,要么删除这个:

 res.setHeader('Access-Control-Allow-Credentials', true); 

或者把起源改为:

 res.setHeader('Access-Control-Allow-Origin', 'http://localhost:3000');