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();
});
ja das Problem ist in der Registrierung. Blockiere die Wartezeit mit try catch, um den Fehler zu sehen –
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) –