Angular

时间:2018-01-08 01:47:58

标签: angular

我正在开发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时,我发送的名称已经定义,插入成功。

有没有人知道问题可能是什么,或者我可以尝试做些什么?

1 个答案:

答案 0 :(得分:0)

我注意到你正在使用

 <this.http.post<company> 

你是否试图以不同的格式接收res.send然后json? 如果您使用的是httpclient,它将返回Json格式作为标准。 然后您可以使用:

让结果键迭代数据,或使用console.log(JSON.stringify(result))输出数据。