我使用節點和MongoDB,打造出一支分組和已經運行到一個節點的控制檯錯誤:節點JS - UnhandledPromiseRejectionWarning
UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): TypeError: Cannot read property 'apply' of undefined
我用愛可信發佈到我的節點JS API的請求這應該在我的MongoDB中創建一個新條目。這裏是我的代碼:
控制器:
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')
}
型號:
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);
路線:
router.post('/createteam',
manageTeamController.validateTeamName,
manageTeamController.register,
manageTeamController.finishCreateTeam
);
我很習慣類似的功能,以創建用戶,所以我不知道我在哪裏出錯了,再加上我不完全確定錯誤的意思。當我註釋掉等待register(team,req.body.password);
錯誤消失,所以我想這是我的地方出了問題,但不知道如何!
這裏是堆棧跟蹤我在unhandledRejection日誌加入後得到我有人提出:
[] 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) }
這裏是行app.js 73:
app.use((req, res, next) => {
req.login = promisify(req.login, req);
next();
});
是的問題是在註冊。阻止等待嘗試趕上看到錯誤 –
可能重複[如何找到哪些承諾是未處理的nodejs UnhandledPromiseRejectionWarning?](https://stackoverflow.com/questions/43834559/how-to-find-which-promises- is-unhandled-in-nodejs-unhandledpromiserejectionwarni) –