Angular 5使用Express,会话无效

时间:2018-03-02 12:28:21

标签: node.js angular express angular5

我是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项目并将代码复制到节点项目,但这会使我的开发变得缓慢。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

由于您运行在不同的端口上,因此我认为您存在跨域问题。

这个问题已经讨论过了,我相信您可以在这里找到解决方案:Passport js fails to maintain session in cross-domain

简而言之,您需要配置服务器以发送适当的标头,以允许跨域共享访问标头。