NodeJS – 控制器没有返回JSON到Route。

所以我创建了一个Controller来创建一个用户配置文件,一切都很好,它在数据库中创建了它,但是我不能在响应中得到任何东西……起初我以为是我的Route的问题,但是经过一些测试,在Controller的方法中早期添加了一个测试响应,它的返回很好。我不知道我错过了什么,因为就像我说的,它进入DB的罚款。

下面是我的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
        }
      });
    });
  });

};

Route.js

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

解决方案:

尝试添加一个 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
        }
}




给TA打赏
共{{data.count}}人
人已打赏
解决方案

在MeteorJS中的表单上,在onSubmit之后路由到一个新的URL。

2022-4-22 17:09:06

解决方案

当两个或多个表关联在一起时,如何在查询中得到有空值的行?

2022-4-22 17:09:08

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索