Почему я получаю [объект объекта] вместо JSON? - PullRequest
1 голос
/ 18 октября 2019

Я делаю API. Когда я отправляю правильные данные для входа в систему, я получаю JSON, но когда я отправляю неверные данные, я получаю это сообщение [объект объекта], почему?

Когда предоставляется правильная информация.

Здесьмой код.

router.route('/login').post(function (req, res, next) {
    console.log('i should be here when path match to login', req.body);

    UserModel.findOne({
        username: req.body.username,
      })
      .exec(function (err, user) {
        if (err) {
          return next(err);
        }
        if (user) {
          var passwordMatch = passwordHash.verify(req.body.password, user.password);
          if (passwordMatch) {
            var token = generateToken(user);
            res.status(200).json({
              user: user,
              token: token
            });
          } else {
            next({
              message: "password didnot match",
              status: 400
            })
          }
        } else {
          next({
            message: 'Invalid Username',
            status: 400
          })
        }
      });
  });

Ответы [ 3 ]

1 голос
/ 18 октября 2019
 res.status(200).json({
              user: user,
              token: token
            });

Вот как вы отправляете в случае успеха. Вы форматируете ответ как JSON. Но в случае неудачи вы возвращаете простой JS Object. Форматирование ответов об ошибках как объекта JSON решит вашу проблему.

1 голос
/ 18 октября 2019

Значение [Object object] не имеет никакого отношения к отправленным вами данным. Это связано с тем, как вы печатаете значение.

[Object object] означает, что вы получили объект. Значение типа обычно возвращается, когда вы объединяете object с string.

Пример:

var obj = {a: 1};
console.log('Printing ' + obj); // Prints [object object]

Таким образом, вместо объединения object, вы можете stringify объект и распечатать его.

Пример

var obj = {a: 1};
console.log('Printing ' + JSON.stringify(obj)); // Prints {"a":1}

или

var obj = {a: 1};
console.log('Printing ', obj); // Prints formatted {"a":1}
0 голосов
/ 18 октября 2019

Вы можете сделать это без использования следующего. Попробуйте этот код, он сразу заработает!

router.route('/login').post(function (req, res, next) {
        console.log('i should be here when path match to login', req.body);

        UserModel.findOne({
            username: req.body.username,
          })
          .exec(function (err, user) {
            if (err) {
              console.log(err);
              res.status(500).json({message:'Backend error'})
            }
            if (user) {
              var passwordMatch = passwordHash.verify(req.body.password, user.password);
              if (passwordMatch) {
                var token = generateToken(user);
                res.status(200).json({
                  user: user,
                  token: token,
                  message:'Login successful'
                });
              } else {
                res.status(400).json({message:'Wrong password'})
              }
            } else {
              res.status(400).json({message:'User does not exist'})
            }
          });
      });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...