NodeJS - контроллер не возвращает JSON в маршрут - PullRequest
1 голос
/ 22 апреля 2020

Итак, я создал контроллер для создания профиля пользователя, все работает нормально, он создает его в базе данных, но я ничего не могу получить по ответу ... Сначала я подумал, что это мой маршрут, но после некоторого тестирование, добавив тестовый ответ в начале метода в контроллере, он возвращает нормально. Я не уверен, что мне не хватает, так как, как я уже сказал, он входит в базу данных нормально.

Вот мой контроллер. js

module.exports = function(req, res) {
  var mod = {
     createMerchantUser(req, res) {
       var merchantDescription = 'Merchant for ' + req.body.email;

       ////////// If I add a test Response HERE it returns perfectly
       /////////  return{ message: "Testing response here..." }


     // ANYTHING BELOW GETS CREATED IN DATABASE BUT DOESN'T PROVIDE A RESPONSE
       var merchant = stripe.customers.create({
         email: req.body.email,
         description: merchantDescription
       }, function(err, customer) {

         var new_merchant_user = new MerchantUser({
           email: req.body.email,
           password: req.body.password,
           accountConfirmed: false,
           stripeID: customer.id
         });

        new_merchant_user.save(function(err, merchantUser) {

           if (err) {
             if (err.name === 'MongoError' && err.code === 11000) {
             // Duplicate username
                return res.status(500).send({ success: false, message: 'An account with this email already exists!' });
             }
           }

           res.json({
             data: {
               merchantUser
             }
           });
         });
       });
     }
   }
   return mod;
};

Вот мой маршрут. js

  app.post('/api/createMerchUser', (req, res) => {
    return res.json(merchantUsersController.createMerchantUser(req, res))
  })

ОБНОВЛЕНИЕ:

Просто для большего контекста. Ниже приведен другой способ, которым я привык это делать, который работал бы идеально. Он вернул объект после его создания. Проблема с этим способом заключается в том, что я не могу вызывать методы в разных контроллерах, поэтому мне пришлось go с помощью метода выше ...

Controller. js


exports.create_merchant_user = function(req, res) {
  var merchantDescription = 'Merchant for ' + req.body.email;

  var merchant = stripe.customers.create({
    email: req.body.email,
    description: merchantDescription
  }, function(err, customer) {

    var new_merchant_user = new MerchantUser({
       email: req.body.email,
       password: req.body.password,
       accountConfirmed: false,
       stripeID: customer.id
    });

    new_merchant_user.save(function(err, merchantUser) {

      if (err) {
        if (err.name === 'MongoError' && err.code === 11000) {
        // Duplicate username
            return res.status(500).send({ success: false, message: 'An account with this email already exists!' });
        }
      }

      res.json({
        data: {
          merchantUser
        }
      });
    });
  });

};

Маршрут. js

  app.route('/api/merchantUser')
    .post(merchantUsers.create_merchant_user);

Ответы [ 4 ]

0 голосов
/ 22 апреля 2020

Получаете ли вы код состояния 304?

если это так, то

Код ответа 304 Не изменено указывает, что запрошенный ресурс не был изменен со времени предыдущей передачи. Как правило, это означает, что нет необходимости повторно передавать запрошенный ресурс клиенту, и вместо этого можно использовать кэшированную версию.

Попробуйте изменить данные во время выполнения запроса на получение, затем посмотрите, получаете ли вы данные на ответ или нет.

0 голосов
/ 22 апреля 2020

Вы не возвращаете данные на маршрут в вашем контроллере. Используйте return keywrord.

 return res.json({
             data: {
               new_merchant_user
             }
           });
0 голосов
/ 22 апреля 2020

Попробуйте следующий код:

return res.status(200).type('application/json').send({
                    "statusCode": 200,
                    "statusMsg": "success, 
                    "data": merchantUser
                });

0 голосов
/ 22 апреля 2020

Попробуйте добавить блок else


if (err) {
    if (err.name === 'MongoError' && err.code === 11000) {
        // Duplicate username
        return res.status(500).send({ success: false, message: 'An account with this email already exists!' });
    }
} else {

    return res.json({
        data: {
            merchantUser
        }
}




Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...