Node.js 在angular 5中,如何在post响应后从restAPI获取发送数据?

Node.js 在angular 5中,如何在post响应后从restAPI获取发送数据?,node.js,angular,rxjs,observable,angular-http,Node.js,Angular,Rxjs,Observable,Angular Http,我对从服务器发送的json对象的输出有问题,由于某种原因,我无法获取并显示服务器响应中包含的消息。我做错了什么?谢谢你的帮助。 下面是我的申请代码 服务: import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpRequest } from '@angular/common/http'; import { User } from './user'; import { Observable

我对从服务器发送的json对象的输出有问题,由于某种原因,我无法获取并显示服务器响应中包含的消息。我做错了什么?谢谢你的帮助。 下面是我的申请代码

服务:

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders, HttpRequest } from '@angular/common/http';
import { User } from './user';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';

import { ResponseObject } from './response-object';

@Injectable()
export class MntApiService {

  private mntAPI = 'http://localhost:3000';

  constructor(private _http: HttpClient) {
  }
  getUsers(): Observable<any> {
    return this._http.get<any>(this.mntAPI + '/users');
  }
  addUser(email: string, password: string): Observable<any> {
    return this._http.post<any>(this.mntAPI + '/signup', { email, password }, )
    .map((response: Response) => response);
  }
}
component.html

<div class="container pt-5">
  <form [formGroup]="myForm">
    <div class="form-group">
      <label for="email">Email address</label>
      <small class="form-text text-danger">
        {{response?.body.message}}
      </small>
      <input formControlName="email" type="email" class="form-control" id="email" placeholder="Enter email" autocomplete="email">
      <small *ngIf="isControlInvalid('email')" class="form-text text-danger">неправельный формат почты</small>
    </div>
    <div class="form-group">
      <label for="password">Password</label>
      <input formControlName="password" type="password" class="form-control" id="password" placeholder="Password"
        autocomplete="current-password">
      <small *ngIf="isControlInvalid('password')" class="form-text text-danger">это поле не может быть пустым</small>

    </div>
    <button (click)="addUser()"  class="btn btn-primary">Submit
    </button>
  </form>

</div>

电子邮件地址
{{response?.body.message}
неправельный формат почты
密码
это поле не может быть пустым
提交
和我的节点服务器代码:

app.post('/signup', (req, res) => {

  let sql = 'SELECT email FROM users WHERE email = ?';
  let emailBody = [req.body.email];

  config.query(sql, emailBody, (err, userEmail) => {
    const errResponse = {
      sacces: false,
      message: 'Почта занята'
    };
    const rightResponse = {
      'sacces': true,
      'message': 'Пользователь создан',
      'status': 201
    };
    if (userEmail.length < 0) {
      res.status(409).send(errResponse);
      console.log('mail exist!!!!');
      return;
    } else {
      bcrypt.hash(req.body.password, 10, (err, hash) => {
        if (err) {
          return res.status(500).json({
            error: err
          });
        } else {
          let sql = 'INSERT INTO users ( email, password) VALUES ( ?, ?)';
          let email = req.body.email;
          let password = hash;
          let body = [email, password];
          config.query(sql, body, (err) => {
            if (err) {
              res.json({
                "message": 'SQL Error'
              });
            } else {
              //res.sendStatus(201);
              res.status(201).send(rightResponse);
              // res.status(201).json({
              //   'message': "Спасибо за регестрацию"
              // });
              console.log('User created');
              return;
            }
          });
        }
      });
    }
  });
});
app.post('/signup',(req,res)=>{
让sql='从电子邮件=?'的用户中选择电子邮件';
让emailBody=[req.body.email];
config.query(sql,emailBody,(err,userEmail)=>{
常量错误响应={
萨克斯:错,
信息:'
};
常数rightResponse={
“sacces”:没错,
“消息”:“Пззззззззз”,
“状态”:201
};
如果(userEmail.length<0){
res.status(409).send(errResponse);
log('mail exist!!!!');
返回;
}否则{
bcrypt.hash(req.body.password,10,(err,hash)=>{
如果(错误){
返回res.status(500).json({
错误:错误
});
}否则{
让sql='插入用户(电子邮件、密码)值(?,)';
让email=req.body.email;
让password=hash;
让body=[电子邮件,密码];
config.query(sql,body,(err)=>{
如果(错误){
res.json({
“消息”:“SQL错误”
});
}否则{
//res.sendStatus(201);
res.status(201).发送(rightResponse);
//res.status(201.json)({
//“信息”:“СПаззаааааааааааа1072
// });
console.log('User created');
返回;
}
});
}
});
}
});
});

请帮助可能的人,我是一个新手开发人员。

这是您代码的一部分

   this.mntApiService.addUser(val.email, val.password)
    .subscribe(user => {
      this.users.push(user);
    },
  response => { this.response = response; });
您在这里所做的是传递
subscribe
method2参数。 第一个参数是这个函数

user => {
          this.users.push(user);
        }
response => { this.response = response; }
第二个参数是这个函数

user => {
          this.users.push(user);
        }
response => { this.response = response; }
当发生错误时,作为第二个参数传递给
subscribe
的函数将被执行,我想这不是您想要的

也许像这样的一个实现应该可以为您提供帮助

   this.mntApiService.addUser(val.email, val.password)
    .subscribe(response => {
      response => { this.response = response; });
      // this.users.push(user); CHECK THIS LINE - YOU ARE NOT RECEIVING A USER FROM THE SERVER BUT A MESSAGE
    };

尝试在浏览器中使用网络检查器。您的代码正在发出请求吗?是的,在网络选项卡中,在响应选项卡中,我看到{“sacces”:true,“message”:“User created”,“status”:201}。您的控制台中将显示什么?仅输出未定义如果在
中添加
console.log()
。subscribe(User)
block在组件中?非常感谢您的评论和回答,他完全解决了我的问题。再次感谢!