我一遍又一遍地面对同样的错误:
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.
我已经阅读了与此类似的无数帖子,他们几乎都有相同的答案,即添加以下设置:res.setHeader('Access-Control-Allow-Origin', '*')
。
这就是我一直在做的事情,但它仍然无法奏效。
我在localhost:8000上给了一个angular.js应用程序(当点击btn时调用了logsth()),我的节点在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 / form 时,我收到404错误。但是当我使用router.use(...)和router.post(...)时,至少链接工作正常。此外,没有“允许来源”#39;错误,但我得到:POST http://localhost:3000/form 404 (Not Found)
。但是,当我转到http://localhost:3000/form时,它会显示响应和console.log。我应该把它作为路由器而不是应用程序吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
问题是您正在返回通配符来源(*
)和尝试传递凭据(res.setHeader('Access-Control-Allow-Credentials', true);
)。你不能两者兼得。如果您必须使用Access-Control-Allow-Credentials
,那么您需要明确Access-Control-Allow-Origin
标题中允许的来源。
所以,要么删除它:
res.setHeader('Access-Control-Allow-Credentials', true);
或者将原点更改为:
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:3000');