2017-08-08 12 views
0

Ich benutze NodeJS, PassportJS, MySQL und Sequalize (ORM für MySQL). Dieser Code stammt aus meiner Passport.JS-Datei. Wenn sich ein Nutzer auf meiner Website registriert, wenn der Benutzername oder die E-Mail-Adresse verwendet wird, erhalte ich einen Fehler. Wenn Benutzername und E-Mail nicht in der Datenbank gefunden werden können, wird ein neues Konto erstellt.Unbehandelte Ablehnung TypeError: Kann Eigenschaft 'Benutzername' von Null nicht lesen

Der Fehler Ich erhalte, wenn ich auf meiner Website registrieren ist ...

Unhandle Ablehnung Typeerror: kann Eigenschaft ‚username‘ von null bei null lesen. (/home/ubuntu/workspace/Authentication.1/config/passport/passport.js:50:16) bei tryCatcher (/home/ubuntu/workspace/Authentication.1/node_modules/sequelize/node_modules/bluebird/js/release /util.js:16:23) bei Promise._settlePromiseFromHandler (/home/ubuntu/workspace/Authentication.1/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:512:31) bei Promise. _settlePromise (/home/ubuntu/workspace/Authentication.1/node_modules/sequelize/node_modules/bluebird/js/release/promise.js:569:18) bei Promise._settlePromise0 (/home/ubuntu/workspace/Authentication.1/ node_modules/sequelize/node_modules/bluebird/js/release/promise.js: 614: 10) bei Promise._settlePromises (/home/ubuntu/workspace/Authentication.1/node_modules/sequelize/node_modules/bluebird/js/release/promise .js: 693: 18) bei Async._drainQueu e (/home/ubuntu/workspace/Authentication.1/node_modules/sequelize/node_modules/bluebird/js/release/async.js:133:16) bei Async._drainQueues (/home/ubuntu/workspace/Authentication.1/ node_modules/sequelize/node_modules/drossel/js/release/async.js: 143: 10) bei Immediate.Async.drainQueues [wie _onImmediate] (/home/ubuntu/workspace/Authentication.1/node_modules/sequelize/node_modules/bluebird /js/release/async.js:17:14)

User.findOne({ 
     // SELECT * FROM users WHERE username = username || email = ... 
     where: { 
      $or: [{username: username}, {email: req.body.email}] 
     } 
    }).then(function(user){ 

    // GETTING ERROR HERE. If username is already in database 
    if(user.username !== null && user.username == req.body.username) { 
     return done(null, false, console.log("USER TAKEN"),{message : 'That username is already taken'}); 
    } 

    // If email is already in database return err. 
    else if(user.email !== null && user.email == req.body.email) { 
     return done(null, false, console.log("EMAIL TAKEN"),{message : 'That email is already taken'}); 
    } 

    else [code for create new account]... 
+1

'user' ist null, nicht der Benutzername. – Li357

Antwort

2

Ihr Problem ist von der ersten Prüfung in Ihrer if Aussage. Falls der Benutzer nicht gefunden wird, wird user Null sein und die Anweisung user.username !== null wird zu der Fehlermeldung führen, die Sie erhalten.

Sie sollten eine Nullprüfung für das Objekt als Ganzes durchführen, nicht die Eigenschaft. if(user!== null && user.username == req.body.username){...}

Verwandte Themen