首页 > 解决方案 > NodeJS - 控制器没有将 JSON 返回到路由

问题描述

所以我创建了一个控制器来创建用户配置文件,一切正常,它在数据库中创建它,但我无法得到任何响应......起初我认为这是我的路线,但经过一些测试后添加在控制器中的方法早期的测试响应,它返回正常。我不确定我错过了什么,就像我说它进入数据库一样。

这是我的 Controller.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;
};

这是我的 Route.js

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

更新:

只是为了更多的上下文。以下是我过去使用的不同方式,效果很好。它在创建对象后返回它。这样做的问题是我不能在不同的控制器中调用方法,因此我不得不使用上面的方法......

控制器.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);

标签: node.jsmongodbrestmongoose

解决方案


试试下面的代码:

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


推荐阅读