Express发送一个空对象,但console.log正确显示该对象

时间:2016-07-29 02:45:29

标签: node.js mongodb express mongoose

我使用express和mongoDB(使用mongoose)实现一个简单的本地身份验证,并且由于某种原因,服务器会为用户发回一个空的响应对象,但令牌会在响应中发送。我在返回之前立即包含了一个console.log语句,尝试稍微调试它,并且在那里记录的对象是包含所有数据的正确对象。这就是创建代码的样子

import mongoose from 'mongoose';
import jwt from 'jsonwebtoken';
import json from '../helpers/json';

var User = mongoose.model('User');

module.exports = function() {
  var obj = {};

  obj.create = function (req, res) {
     var roles = ['authenticated'];

     User.count({}, (err, len) => {
        if (!len) {
           roles.push('admin');
        }

        var user = new User(req.body);
        user.roles = roles;
        user.provider = 'local';
        user.token = jwt.sign(user, global.config.secret, {expiresIn: 10800});
        user.save((err, user) => {
            if (err) {
               return json.bad(err, res);
            }

            json.good({
                record: user,
                token: user.token
            }, res);
       });
     });
    };

  return obj;
 };

就像我说的,我已经包含了一个console.log语句,用户将正确显示。

如果您想知道,json.good是我编写的辅助函数,基本上看起来像这样

module.exports = {
  good: function (obj, res) {
     res.send({
       success: 1,
       res: obj
     });
  },

  bad: function (err, res) {
     var obj = {
        success: 0,
        res: err
     };

     if (obj.res.errors) {
       obj.res.messages = [];

       for (var i in obj.res.errors) {
          obj.res.messages.push(obj.res.errors[i].message;
       }

       obj.res.messages = obj.res.messages[0];

     }

     res.send(obj);

     }
};

我也在我的快递文件中允许正确的标题和方法。这段代码与我之前使用过的代码完全相同,但我似乎错过了一些东西。

任何帮助将不胜感激,谢谢!

!!!!!!!固定固定!!!!

我发现了问题,这是在我的模型中。我有

UserSchema.methods = {
     toJSON: function() {
       var obj = this.toObject();
       delete obj.password;
       delete obj.following;
    }
};

我忘记了最后回来的obj。谢谢大家!

1 个答案:

答案 0 :(得分:0)

确保MongoDB中的值类型与变量类型匹配... 因此,如果您有一个名为'fav'的密钥,它是一个Int32,那么请确保您用来查找它的变量是Int32。