设置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');
- 使用ajax post请求接收来自节点服务器的响应问题
- 如何在命令行中testingAJAX?
- 在处理POST请求时确定谁在Node上使用basicAuth进行了身份validation
- 如何通过Azure网站上的Node.js应用程序将大文件stream上传到Azure Blob存储?
- 现场股票研究 – 使用Ajax和PHP或者Socket.io和Node.js,或者使用Flash或者Ruby on Rails
- 将jQuery ajax调用转换为vanilla Javascript – 不能POST / public / error
- Node.js,Ajax发送和接收Json
- 最好的方式来保持页面连接?
- 如何在Node.js中集成ajax?