我是Angular 2/4/5的新手(从AngularJS迁移)。 我在:
运行NodeJs + Express服务器http://localhost:3000
我正在运行我的Angular项目:
ng serve --open
以:
运行http://localhost:4200
我使用以下函数创建了HttpService来发出http请求:
sendRequest(requestObject): Promise<any> {
// set created_at / updated_at on request if create or update operation
if (this.isDataUpdateOperation(requestObject)) {
requestObject = this.setDate(requestObject);
}
let headers = new Headers({ 'Content-Type': 'application/json', 'withCredentials': true });
let options = new RequestOptions({ headers: headers });
if(requestObject.REQUEST_METHOD == this.constants.REQUEST_METHODS.GET){
return this.http.post(
this.constants.SERVER.ROOT + this.constants.SERVER.API_PATH + requestObject.API_URL,
requestObject.REQUEST_DATA,
options).toPromise()
.then((response)=>{
return response.json();
});
}
else if(requestObject.REQUEST_METHOD == this.constants.REQUEST_METHODS.POST){
return this.http.post(
this.constants.SERVER.ROOT + this.constants.SERVER.API_PATH + requestObject.API_URL,
requestObject.REQUEST_DATA,
options).toPromise()
.then((response) => {
return response.json();
});
}
else if(requestObject.REQUEST_METHOD == this.constants.REQUEST_METHODS.PUT){
return this.http.put(
this.constants.SERVER.ROOT + this.constants.SERVER.API_PATH + requestObject.API_URL,
requestObject.REQUEST_DATA,
options).toPromise()
.then((response) => {
return response.json();
});
}
else if(requestObject.REQUEST_METHOD == this.constants.REQUEST_METHODS.DELETE){
return this.http.delete(
this.constants.SERVER.ROOT + this.constants.SERVER.API_PATH + requestObject.API_URL,
options).toPromise()
.then((response) => {
return response.json();
});
}
}
登录后,我对服务器的所有调用都失败了403响应代码和消息:
Response for preflight has invalid HTTP status code 403
我检查了回复,发现以下回复:
[
{
"message": "NOT LOGGED"
}
]
我猜测它可能是CORS问题而且会话没有存储或返回给服务器。
我也使用了chrome CORS插件但没有帮助。
我能想到的最后一件事是构建Angular项目并将代码复制到节点项目,但这会使我的开发变得缓慢。
我做错了什么?
答案 0 :(得分:0)
由于您运行在不同的端口上,因此我认为您存在跨域问题。
这个问题已经讨论过了,我相信您可以在这里找到解决方案:Passport js fails to maintain session in cross-domain
简而言之,您需要配置服务器以发送适当的标头,以允许跨域共享访问标头。