Как вытащить коды ответа о состоянии из бэкэнда и использовать его в веб-интерфейсе? - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь отправить коды ответов о состоянии из серверной части, которая находится в Node.js, в мой интерфейс, который находится в Angular, чтобы отобразить сообщение об ошибке «Электронная почта уже существует».

// Frontend

add.user.component.ts

 if (this.AddUserForm.valid) {
      this.AuthService.register(this.AddUserForm.value)
      .pipe(first())
      .subscribe(
        data => {
            this.router.navigate(['dashboard/user']);
          this.snackbar.open('User has been Added', 'Close', {
            duration: 3000,
          });
        },
        error => {
          this.loading = false;
          this.snackbar.open('Unsuccessful', 'Close', {
            duration: 3000,
          });
        },
      );
    } 

authentication.service.ts

register(user: User) {
    // const headers = new HttpHeaders({ 'Authorization': JSON.parse(localStorage.getItem('currentUser')).token });
    return this.http.post<any>(`${this.environment.userUrl}/auth/register`, user);
  }

// Backend

authentication.js

exports.register = function (req, res, next) {

    var email = req.body.email;
    var password = generator.generate({
        length: 10,
        numbers:true,
        uppercase:true,
        symbols: true
    });


    if (!email) {
        return res.status(422).send({
            error: 'You must enter an email address'
        });
    }

    User.findOne({
        email: email
    }, function (err, existingUser) {

        if (err) {

            return next(err);
        }

        if (existingUser) {
            return res.status(422).send({
                error: 'That email address is already in use'
            });
        }

        var user = new User({
            email: email,
             password: password,

        });

        user.save(function (err, user, done) {

            if (err) {
                return next(err);
            }

            var userInfo = setUserInfo(user);

            res.status(201).json({
                message: 'Please Check you Email Address',
                 token: 'JWT ' + generateToken(userInfo),
                user: userInfo
            });

Код ответа необходимо отправитьот бэкэнда до моего интерфейса.Здесь, в этом случае, код состояния ответа 422 необходимо отправить на мой интерфейс

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Вы должны иметь возможность просто прочитать статус непосредственно на HttpResponse, не включая его в ответ json:

this.AuthService.register(this.AddUserForm.value)
  .pipe(first())
  .subscribe(data => console.log(data.status));

Возможно, вам придется добавить это и к вызову http:

{observe: 'response'}

Так и получается так:

this.http.post<any>(`${this.environment.userUrl}/auth/register`, user, {observe: 'response'});
0 голосов
/ 07 февраля 2019

В объекте ответа вы можете добавить значение statuCode.

if (existingUser) {
            return res.status(422).send({
                error: 'That email address is already in use',
                statusCode: 422
            });
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...