mongodb Express发送一个空对象,但发送一个控制台,日志正确显示对象[重复]

gab6jxml  于 2023-04-29  发布在  Go
关注(0)|答案(1)|浏览(88)

此问题已在此处有答案

How do I return the response from an asynchronous call?(41答案)
6年前关闭。
我用express和MongoDB(使用Mongoose)实现了一个简单的本地身份验证,由于某种原因,服务器为user发回了一个空的响应对象,但令牌在响应中被发送。我有一个控制台。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;
 };

就像我说的,我有一个控制台。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);

     }
};

我还允许在express文件中使用正确的头和方法。这段代码与我以前使用过的代码相同,但似乎缺少了一些东西。

更新

我发现了问题,就在我的模型里。我有

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

最后我忘了把obj还回去。谢谢大家!

8dtrkrch

8dtrkrch1#

确保MongoDB中的值类型与变量类型匹配。..所以如果你有一个名为'fav'的键,它是一个Int32,然后确保你用来查找它的变量是一个Int32。

相关问题