Javascript 设置访问控制允许原点不';t使用AJAX/Node.js
我一次又一次地面对同样的错误:Javascript 设置访问控制允许原点不';t使用AJAX/Node.js,javascript,ajax,node.js,Javascript,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
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/表单时,我得到404错误。但是当我使用router.use(…)和router.post(…)时,至少链接可以正常工作。此外,没有“允许源代码”错误,但我确实得到:
POSThttp://localhost:3000/form 404(未找到)
。但是,当我转到它时,它会显示响应和console.log。我是否应该将其保留为路由器而不是应用程序?问题是您正在返回通配符源(*
)并尝试传递凭据(res.setHeader(Access-Control-Allow-credentials',true);
)。你不能两者兼而有之。如果必须使用访问控制允许凭据
,则需要在访问控制允许来源
标题中明确说明允许的来源
因此,要么删除此项:
res.setHeader('Access-Control-Allow-Credentials', true);
或将原点更改为:
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:3000');
只需留下这一行,我就成功了:
res.setHeader('Access-Control-Allow-Origin', '*');
更新:
您可以尝试安装cors
模块。打开网络控制台。是否发送了选项请求?如果是,您是否看到了预期的标题?您只需要ACAO,其余的是多余的,可能会导致问题。尝试了两个选项,但没有改变任何内容。我认为需要将原始标题设置为http://localhost:8000
在这种情况下,从原点开始(浏览器中的页面)是8000,目标服务器是3000。谢谢,我也这么认为。更改了它,但错误仍然存在。@tzolkin,在开发工具的“网络”选项卡或类似的应用程序中,响应是什么样子的?你应该在响应中看到访问控制允许源代码标题。我只得到这一行数据:form/POST/404 not foundHi,我面临同样的问题。你能告诉我应该在哪个文件中添加这一行吗?是@AnandRaj-在初始化你的应用程序后在中间件中:var app=express();使用(函数(req,res,next){res.setHeader('Access-Control-Allow-Origin','*');next();})代码>对你有用吗?不。。。我也测试过。。。。当我在设备上运行项目时,它为我工作。但它不工作browser@AnandRaj-如果您仍然需要,可以安装cors
npm模块: