我有问题从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'));
}
答案 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();
});