2017-07-19 84 views
0

我在嘗試使用貓鼬查詢mongodb時遇到輕微問題。 這裏是我的代碼示例:Mongoose返回字符串而不是對象

... 
resolve: (root, params) => { 
    var user = User.findOne({email: params.data.email}).exec() 
    return user; 
} 
... 

這將返回以下:

{ 
    "data": { 
"login": "{ _id: 596f4cc4f51fa12bf0f5a001,\n updatedAt: 2017-07-19T12:12:52.736Z,\n createdAt: 2017-07-19T12:12:52.736Z,\n email: '[email protected]',\n password: '$2a$12$bhPG4TPGR6by/UBTeAnzq.lyxhfMAJnBymDbkFDIHWl5.XF2JG62O',\n __v: 0 }" 

}}

我不知道爲什麼會這樣。任何幫助,將不勝感激。

編輯
下面是完整的代碼:

var bcrypt = require('bcryptjs'); 
var _ = require('lodash'); 
var { GraphQLNonNull, GraphQLString } = require('graphql'); 
var jwt = require('jsonwebtoken'); 

var { UserInputType } = require('./UserSchema'); 
var User = require('./UserModel'); 

var login = { 
    type: new GraphQLNonNull(GraphQLString), 
    args: { 
    data: { 
     name: 'Data', 
     type: new GraphQLNonNull(UserInputType) 
    } 
    }, 
    resolve: (root, params, { SECRET }) => { 
    var user = User.findOne({email: params.data.email}).exec(); 
    var authorized = bcrypt.compareSync(params.data.password, user.password); 
    if (!authorized) throw new Error('Invalid password'); 
    var token = jwt.sign({ 
     user: _.pick(user, ['_id', 'name']) 
    }, SECRET, {expiresIn: '1y'}); 
    return token; 
    } 
}; 

回答

1

這可能是它調用的決心和調用此用戶的承諾。於是功能。不能確定沒有更多的代碼...

+0

此函數只是返回一個承諾。顯然,對該承諾的解析功能中的數據進行了一些修改...... –

+0

顯然它只出現在代碼的這個特定部分。我有其他地方有點類似的代碼,如預期的那樣返回對象。 – m8r1x

0
resolve: (root, params, { SECRET }) => { 
    return new Promise(resolve => { 
     User.findOne({email: params.data.email}).exec().then(user => { 
      bcrypt.compare(params.data.password, user.password, (err, authorized) => { 
       if (!authorized) throw new Error('Invalid password'); 
       var token = jwt.sign({ 
        user: _.pick(user, ['_id', 'name']) 
       }, SECRET, {expiresIn: '1y'}); 
       resolve(token); 
      }); 
     }); 
    }).then(token => token); 
} 

決定做到這一點,而不是瞧!解決了我的問題。謝謝您的幫助。

相關問題