2017-07-19 4 views
0

Ich habe ein kleines Problem beim Versuch, Mongos mit Mongoose abzufragen. Hier ist eine Probe von meinem Code:Mongoose zurückkehrende Zeichenfolge anstelle von Objekt

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

Dies gibt die folgende:

{ 
    "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 }" 

} }

Ich habe keine Ahnung, warum dies geschieht. Jede Hilfe wäre willkommen.

EDIT
Hier ist der vollständige Code:

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; 
    } 
}; 

Antwort

1

Diese in der Funktion sein könnte, die Entschlossenheit ruft und ruft .then dieses Benutzers Versprechen. Kann nicht sicher ohne mehr Code sagen ...

+0

Diese Funktion gibt nur ein Versprechen zurück. Es gibt offensichtlich einige Änderungen an den Daten in der Auflösungsfunktion des Versprechens ... –

+0

Scheinbar tritt es nur in diesem spezifischen Teil des Codes auf. Ich habe irgendwo etwas ähnlichen Code, der ein Objekt wie erwartet zurückgibt. – 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); 
} 

Entschlossen, dies stattdessen zu tun und voila! Mein Problem wurde gelöst. Danke für die Hilfe.

Verwandte Themen