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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
        }
}




另一答案

试试下面的代码。

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

另一答案

你是否收到304状态码?

如果是,那么

304 Not Modified 响应代码表示自上次传输后,请求的资源没有被修改。这通常意味着不需要将请求的资源重新传输给客户端,可以使用缓存的版本来代替。

试着在进行get请求的同时修改数据,然后看看响应时是否有数据。

另一答案

你没有将数据返回到控制器中的路由。return 关键字:

 return res.json({
             data: {
               new_merchant_user
             }
           });

以上是关于NodeJS - 控制器没有返回JSON到Route。的主要内容,如果未能解决你的问题,请参考以下文章

nodeJs配置相关以及JSON.parse

使用 Angularjs 和 Nodejs 从 HTML 表单另存为 JSON 文件

nodejs怎么把数据库里接收到的数据传给前端

Shiro Ajax请求没有权限返回JSON,没有登录返回JSON

如何在 ApiController 中为单个方法返回 JSON?

使用 nodejs 创建一个 .json 文件