我正在开发Angular v.5 +应用。我正在尝试实现POST调用,用户将在其中输入公司名称,该名称将写入Mongo数据库。
(因为这是我写的第一个Angular应用程序,我正在努力密切关注Angular.io Tour of Heroes教程中的大纲。所以如果我看到的很多内容看起来与此类似,那就是原因。)
我的公司对象定义如下:
export class Company {
_id: string;
name: string;
}
我的addCompany函数,在company.component.ts中,如下所示:
addCompany(name: string): void {
name = name.trim();
if(!name) { return; }
this.companyService.addCompany( {name} as Company)
.subscribe(company => {
this.companies.push(company);
});
}
此处调用的addCompany函数来自company.service.ts,如下所示:
addCompany(company: Company): Observable<Company> {
return this.http.post<Company>(this.addCompanyUrl,company,httpOptions ).pipe(
tap((company:Company) => console.log(`added company w/ id=${company._id}`)),
catchError(this.handleError<Company>('addCompany'))
);
}
在我的用于与数据库交互的API中,我的app.post函数如下所示:
app.post('/add-company', (req,res) => {
console.log('name: ' + req.body.name);
const comp = { name: req.body.name };
db.collection('companies').insert(comp, (err,result) => {
if(err) {
res.send({'error':'An error has occurred.'});
}
else {
res.send({'success':result});
}
});
});
奇怪的是:当我逐步使用Chrome Dev Tools时,我可以看到公司名称是在addCompany中定义的,但是我在app.post中调用了console.log,它说req.body.name未定义,因此发生错误。但是,当我使用Postman直接调用app.post时,我发送的名称已经定义,插入成功。
有没有人知道问题可能是什么,或者我可以尝试做些什么?
答案 0 :(得分:0)
我注意到你正在使用
<this.http.post<company>
你是否试图以不同的格式接收res.send然后json? 如果您使用的是httpclient,它将返回Json格式作为标准。 然后您可以使用:
让结果键迭代数据,或使用console.log(JSON.stringify(result))输出数据。