我正在尝试从我的角度应用程序向我的node.js服务器发送一个带有用户凭据的http post请求以便记录它。两者都托管在IIS(带有nodeiis的节点服务器)中,并且都配置为通过Windows身份验证进行身份验证。
我的角度代码:
var url = "http://myurl:15001/addItem";
this.http.post(url, {
"itemName": "SomeName",
"itemColor": "SomeColor"
}, {withCredentials: true}).subscribe(res =>{
console.log("Great, item was added");
})
我的Node.js代码:
var app = express();
var allowCrossDomain = function (req, res, next){
res.header('Access-Control-Allow-Origin', "http://myurl") //Cannot be a wildcard because of the credentials.
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
if(res.method == 'OPTIONS')
res.send(200);
else
next();
};
app.use(allowCrossDomain);
app.post('/addItem', function(req, res){
//Saves the item...
res.setHeader('Access-Control-Allow-Origin', 'http://myurl')
res.status(200);
res.send(true);
});
当我执行请求时,我得到以下错误到控制台:
选项http://myurl:15001/addItem 401(未经授权)
XMLHttpRequest无法加载http://myurl:15001/addItem。对预检的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。原因'http://myurl'因此允许访问。响应具有HTTP状态代码401。
当我尝试用我的http get请求做同样的事情时,一切正常,我得到了结果。当我为每个OPTIONS请求发送200个代码时,我不知道为什么我的OPTIONS请求未经授权。
我试图使用cors node.js包但它没有帮助,也许我没用过那个权利。
有人可以解释我如何解决这个问题并使我的http帖子通过预检?非常感谢!
如果您使用的是Angular 6,则它支持proxy.conf,它将代理Backend API URL。有关更多详细信息,请访问https://github.com/angular/angular-cli/blob/master/docs/documentation/stories/proxy.md链接