Node.js 如何解决节点js中的验证错误

Node.js 如何解决节点js中的验证错误,node.js,mongodb,express,validation,Node.js,Mongodb,Express,Validation,我必须做一个验证,对于一个idteam,你不能创建超过5个玩家。我在express中使用node js,在heroku中使用mlab(mongo db) playerModel.count({ idteam: player.idteam }, function (err, count) { console.log('el equipo tiene %d jugadores', count); if (count > 5){ throw 'Equipo

我必须做一个验证,对于一个idteam,你不能创建超过5个玩家。我在express中使用node js,在heroku中使用mlab(mongo db)

    playerModel.count({ idteam: player.idteam }, function (err, count) {
    console.log('el equipo tiene %d jugadores', count);
    if (count > 5){
        throw 'Equipo completo'
    }
  });
我对某个idteam进行计数,当我对保存在count中的数据进行验证时,当满足条件时,它会给出以下错误

Error [ERR_UNHANDLED_ERROR]: Unhandled error. ('Equipo completo')
at Function.emit (events.js:187:17)
at C:\Users\Administrator\Desktop\API JUGADORES\node_modules\mongoose\lib\model.js:4640:13
at C:\Users\Administrator\Desktop\API JUGADORES\node_modules\mongoose\lib\utils.js:581:16
at result (C:\Users\Administrator\Desktop\API JUGADORES\node_modules\mongodb\lib\operations\execute_operation.js:75:17)
at session.endSession (C:\Users\Administrator\Desktop\API JUGADORES\node_modules\mongodb\lib\operations\execute_operation.js:64:11)
at ClientSession.endSession (C:\Users\Administrator\Desktop\API JUGADORES\node_modules\mongodb\lib\core\sessions.js:135:41)
at executeCallback (C:\Users\Administrator\Desktop\API JUGADORES\node_modules\mongodb\lib\operations\execute_operation.js:59:17)
at callbackWithRetry (C:\Users\Administrator\Desktop\API JUGADORES\node_modules\mongodb\lib\operations\execute_operation.js:131:14)
at executeCommand (C:\Users\Administrator\Desktop\API JUGADORES\node_modules\mongodb\lib\operations\estimated_document_count.js:47:7)
at server.command (C:\Users\Administrator\Desktop\API JUGADORES\node_modules\mongodb\lib\operations\command_v2.js:96:7)
at wireProtocol.command (C:\Users\Administrator\Desktop\API JUGADORES\node_modules\mongodb\lib\core\sdam\server.js:253:7)
at C:\Users\Administrator\Desktop\API JUGADORES\node_modules\mongodb\lib\core\connection\pool.js:420:18
at process._tickCallback (internal/process/next_tick.js:61:11)
有人知道为什么会这样吗


谢谢

如果
计数
大于5,您将引发异常。这可能没有必要,因为您可以简单地返回这样一个真实的声明:

new Promise((resolve, reject) => {
    playerModel.count({ idteam: player.idteam }, function (err, count) {
        if (count > 5){
            return reject('Equipo completo');
        }
        return resolve(true);
    });
})
.then(() => {
   //does not have more than 5
})
.catch(() => {
    //has more than 5
});
作为等待回调的承诺:

new Promise((resolve, reject) => {
    playerModel.count({ idteam: player.idteam }, function (err, count) {
        return resolve(count > 5);
    });
})
.then(hasMoreThanFive => {
   if (hasMoreThanFive === true) {
       //has more than 5
   }
   else {
       //does not have more than 5
   }
});
或者只是使用回调本身:

playerModel.count({ idteam: player.idteam }, function (err, count) {
    if (count > 5){
        //place code if has more than 5 here
    }
    else {
        //place code if does not have more than 5 here
    }
});
如果您绝对坚持要让此异常在超过5个时抛出异常,那么您会像这样捕获它:

new Promise((resolve, reject) => {
    playerModel.count({ idteam: player.idteam }, function (err, count) {
        if (count > 5){
            return reject('Equipo completo');
        }
        return resolve(true);
    });
})
.then(() => {
   //does not have more than 5
})
.catch(() => {
    //has more than 5
});

如果计数大于5,则引发异常。如果这是您的预期行为,那么您需要捕获异常并根据需要进行处理。谢谢您的回复。是的,>5是个好主意。如何捕获异常?用try/catch将其包装起来