Angular 2 + NodeJS + Mongoose - 将数据从角度2发布到休息api nodejs后端。节点api日志:OPTION / url,POST标头不起作用

时间:2016-10-09 09:46:16

标签: node.js angular typescript mongoose

我有问题从angular2前端api向后端客户端发送数据 - nodeJS + mongoose。 在Angular2客户端上,我使用数据创建console.log,我发送的数据和服务显示正确的值。

在NodeJS后端我也尝试使用console.log发布的数据,但我没有定义。请看下面的代码,并试着弄清楚我做错了什么。我也尝试使用size = lastWriteIndex - nextReadIndex; Promise<>,效果相同。

PS。通过Angular 2从NodeJS api获取数据效果很好。

PS2。重要的事实,存在问题,因为angular2不会在post或put中生成标题。每当我发出POST Req时,NODE服务器都会记录Observable<>。那是什么意思?

Angular2:

OPTION /login

的NodeJS:

signIn(data: Object): Observable<User> {
    let bodyString = JSON.stringify(data);

    let headers = new Headers({
        'Content-Type': 'application/json',
        'Access-Control-Allow-Origin': '*'
    });
    let options = new RequestOptions({ headers: headers });

    console.log("data: ", data, "\nbodyString: ", bodyString, "\nHeaders: ", headers, "\nOptions: ");

    return this.http
        .post( this.signInUrl, bodyString, {headers: headers})
        .map( (res:Response) => res.json() )
        .catch((error:any) => Observable.throw(error.json().error || 'Server error'));

}

2 个答案:

答案 0 :(得分:0)

我认为您的问题是如何通过不使用您创建的RequestOptions对象来发布帖子请求。

signIn(data: Object): Observable<User> {
let bodyString = JSON.stringify(data);

let headers = new Headers({
    'Content-Type': 'application/json',
    'Access-Control-Allow-Origin': '*'
});
let options = new RequestOptions({ headers: headers });

console.log("data: ", data, "\nbodyString: ", bodyString, "\nHeaders: ", headers, "\nOptions: ");

return this.http
    .post( this.signInUrl, bodyString, options) // **Change happens here
    .map( (res:Response) => res.json() )
    .catch((error:any) => Observable.throw(error.json().error || 'Server error'));

}

唯一的变化是使用您声明的选项(RequestOptions),而不是尝试在post方法中定义“{headers:headers}”。

这是我的第一次发帖。我希望这有所帮助,这可以正确发布。

答案 1 :(得分:0)

我认为问题出在nodejs和angular cominication上。因为他们在不同的端口上工作,所以他们无法做到。因此,您应该将此代码添加到nodejs作为中间件,并且还建议您搜索“cors express”和“cors npm package”。我希望这能解决你的问题。

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});