2017-10-10 3 views
1

Ich bin mit Knoten und MongoDB ein Team Gruppierung zu erstellen und haben sich zu einem Knoten Konsole Fehler ausgeführt:Knoten JS - UnhandledPromiseRejectionWarning

UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): TypeError: Cannot read property 'apply' of undefined

I Axios bin mit einer Anfrage an einen meiner Knoten JS API schreiben Das sollte einen neuen Eintrag in meiner MongoDB erstellen. Hier ist mein Code:

Controller:

const mongoose = require('mongoose'); 
const Team = mongoose.model('Team'); 
const promisify = require('es6-promisify'); 


exports.validateTeamName = (req,res,next) => { 

    req.sanitizeBody('teamName'); 
    req.checkBody('teamName','You must supply a name!').notEmpty(); 
    req.sanitizeBody('userId'); 
    req.checkBody('userId','There was an error with your user id - please log out and log back in!').notEmpty(); 
    const errors = req.validationErrors(); 
    if(errors) { 
     req.flash('error',errors.map(err => err.msg)); 
     res.json(req.flash()) 
     return; //if theres errors stop the function from running 
    } 
    next(); 
}; 

exports.register = async (req,res,next) => { 

    const team = new Team({ 
       teamName:req.body.teamName, 
       owner:req.body.userId 
    }) 

    const register = promisify(Team.register,Team); 
    await register(team,req.body.password); 

     next() 

} 

exports.finishCreateTeam = async (req,res,next) => { 
    console.log('all done') 
} 

Modell:

const mongoose = require('mongoose'); 
const Schema = mongoose.Schema; 
mongoose.Promise = global.Promise; 
const md5 = require('md5'); 
const validator = require('validator'); 
const mongodbErrorHandler = require('mongoose-mongodb-errors'); 
const passportLocalMongoose = require('passport-local-mongoose'); 

const teamSchema = new Schema({ 
    teamName:{ 
     type:String,  
     trim:true,  
     required:'Please supply a team name'   
    }, 
     owner:{ 
     type:String,  
     trim:false, 
       required:'Please supply a user ID'  
     } 
}); 

teamSchema.plugin(mongodbErrorHandler); 

module.exports = mongoose.model('Team',teamSchema); 

Route:

router.post('/createteam', 
    manageTeamController.validateTeamName, 
    manageTeamController.register, 
     manageTeamController.finishCreateTeam 
); 

habe ich sehr ähnliche Funktionalität, um Benutzer zu erstellen, so bin ich nicht sicher, wo ich hier falsch gegangen bin, und ich bin mir nicht ganz sicher, was der Fehler bedeutet .. Wenn ich auskommen die register(team,req.body.password); kommen der Fehler verschwindet, so denke ich, das ist, wo ich bin schief gegangen aber nicht sicher wie!

Hier ist der Stack-Trace, ich bin nach dem Hinzufügen in dem unhandledRejection Protokoll erhalten, die vorgeschlagen wurde:

[] Promise { 
[] <rejected> TypeError: Cannot read property 'apply' of undefined 
[]  at C:\Users\BenLi\Desktop\development projects\note app\new\server\node_modules\es6-promisify\dist\promisify.js:75:40 
[]  at Promise (<anonymous>) 
[]  at C:\Users\BenLi\Desktop\development projects\note app\new\server\node_modules\es6-promisify\dist\promisify.js:54:20 
[]  at exports.register (C:\Users\BenLi\Desktop\development projects\note app\new\server\controllers\manageTeamController.js:29:11) 
[]  at Layer.handle [as handle_request] (C:\Users\BenLi\Desktop\development projects\note app\new\server\node_modules\express\lib\router\layer.js:95:5) 
[]  at next (C:\Users\BenLi\Desktop\development projects\note app\new\server\node_modules\express\lib\router\route.js:137:13) 
[]  at exports.validateTeamName (C:\Users\BenLi\Desktop\development projects\note app\new\server\controllers\manageTeamController.js:18:5) 
[]  at Layer.handle [as handle_request] (C:\Users\BenLi\Desktop\development projects\note app\new\server\node_modules\express\lib\router\layer.js:95:5) 
[]  at next (C:\Users\BenLi\Desktop\development projects\note app\new\server\node_modules\express\lib\router\route.js:137:13) 
[]  at Route.dispatch (C:\Users\BenLi\Desktop\development projects\note app\new\server\node_modules\express\lib\router\route.js:112:3) 
[]  at Layer.handle [as handle_request] (C:\Users\BenLi\Desktop\development projects\note app\new\server\node_modules\express\lib\router\layer.js:95:5) 
[]  at C:\Users\BenLi\Desktop\development projects\note app\new\server\node_modules\express\lib\router\index.js:281:22 
[]  at Function.process_params (C:\Users\BenLi\Desktop\development projects\note app\new\server\node_modules\express\lib\router\index.js:335:12) 
[]  at next (C:\Users\BenLi\Desktop\development projects\note app\new\server\node_modules\express\lib\router\index.js:275:10) 
[]  at Function.handle (C:\Users\BenLi\Desktop\development projects\note app\new\server\node_modules\express\lib\router\index.js:174:3) 
[]  at router (C:\Users\BenLi\Desktop\development projects\note app\new\server\node_modules\express\lib\router\index.js:47:12) 
[]  at Layer.handle [as handle_request] (C:\Users\BenLi\Desktop\development projects\note app\new\server\node_modules\express\lib\router\layer.js:95:5) 
[]  at trim_prefix (C:\Users\BenLi\Desktop\development projects\note app\new\server\node_modules\express\lib\router\index.js:317:13) 
[]  at C:\Users\BenLi\Desktop\development projects\note app\new\server\node_modules\express\lib\router\index.js:284:7 
[]  at Function.process_params (C:\Users\BenLi\Desktop\development projects\note app\new\server\node_modules\express\lib\router\index.js:335:12) 
[]  at next (C:\Users\BenLi\Desktop\development projects\note app\new\server\node_modules\express\lib\router\index.js:275:10) 
[]  at app.use (C:\Users\BenLi\Desktop\development projects\note app\new\server\app.js:73:3) } 

Hier Linie 73 in app.js ist:

app.use((req, res, next) => { 
    req.login = promisify(req.login, req); 
    next(); 
}); 
+0

ja das Problem ist in der Registrierung. Blockiere die Wartezeit mit try catch, um den Fehler zu sehen –

+1

Mögliches Duplikat von [Wie finde ich heraus, welche Versprechen nicht behandelt werden in nodejs UnhandledPromiseRejectionWarning?] (Https://stackoverflow.com/questions/43834559/how-to-find-which- promises- is-unhandled-in-nodejs-unhandledpromiserejectionwarni) –

Antwort

2

aktivieren Versprechen Ablehnung Protokollierung , so können Sie die Zeilennummer des Fehlers sehen:

// Show unhandled rejections 
process.on('unhandledRejection', function(reason, promise) { 
    console.log(promise); 
}); 

Das sieht aus wie Express, also würden Sie Tun Sie dies in app.js.

Off Topic: Sie wollen wahrscheinlich nicht verwenden md5 für Hashing in 2017 - es ist ziemlich einfach für jemanden, zwei Dinge mit dem gleichen Hash zu machen.

+0

Ich habe meine Frage mit dem Konsolenprotokoll aktualisiert, das es gibt. Sieht so aus, als käme der Fehler von der Promisify-Bibliothek? –

+0

Sieht aus, als wäre die 'app.use' auf' note app \ new \ server \ app.js: 73: 3' die Zeile, die das Problem verursacht. – mikemaccana

+0

Habe mit Zeile 73 in app.js –

0

Ich vermute, dass Team.register nicht definiert ist, die nicht als eine Funktion aufgerufen werden kann.

Wenn die Promistified-Register-Methode aufgerufen wird, hat sie keinen Verweis auf die Methode. Es versucht undefined.apply(scope, args), zu nennen, die den Fehler wirft

TypeError: Cannot read property 'apply' of undefined

den Mungo docs Blick durch, sehe ich nicht model.register überall. Überprüfen Sie the docs für die entsprechende Methode.