无法将带有凭据的http帖子发送到iis节点服务器

时间:2018-09-03 12:03:39

标签: node.js angular express iis cors

我正在尝试使用用户凭据将我的角度应用程序中的http发布请求发送到我的node.js服务器,以便对其进行记录。 两者都托管在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帖子通过预检?非常感谢!

1 个答案:

答案 0 :(得分:0)

如果您使用的是Angular 6,它支持proxy.conf,它将代理后端API URL。有关更多详细信息,这里是链接https://github.com/angular/angular-cli/blob/master/docs/documentation/stories/proxy.md