【发布时间】:2016-09-12 22:00:57
【问题描述】:
我一遍又一遍地面临同样的错误:
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(...) 时,至少链接可以正常工作。此外,没有“允许来源”错误,但我确实得到:POST http://localhost:3000/form 404 (Not Found)。但是,当我转到 http://localhost:3000/form 时,它会显示响应和 console.log。我应该将其保留为路由器而不是应用程序吗?
【问题讨论】:
-
打开您的网络控制台。是否正在发送 OPTIONS 请求?
-
如果是,你看到你期待的标题了吗?
-
您只需要 ACAO,其余的都是多余的,可能会导致问题。
标签: javascript ajax node.js