我试图重新抛出并随后捕获从mongoose findOne
语句返回的错误 .
当我的播放器不存在时,我遇到以下错误:
events.js:188 throw err; ^错误:未处理的“错误”事件 . (找不到播放器:NONEXISTENT_PLAYERNAME)位于model.Query的Function.emit(events.js:186:19) . (/Users/blair/Documents/Lobster/node_modules/mongoose/lib/model.js:4083:13)/Users/blair/Documents/Lobster/node_modules/kareem/index.js:273:21 at / Users / blair /Documents/Lobster/node_modules/kareem/index.js:131:16在_combinedTickCallback(internal / process / next_tick.js:131:7)at process._tickDomainCallback(internal / process / next_tick.js:218:9)
我的代码:
Game Route
router.post('/update_player', (req, res) => {
gameController.updatePlayer(req, res);
});
Game Controller
controller.updatePlayer = async (req, res) => {
const { game_name, player_name, x, y, z } = req.body;
Game.updatePlayer(game_name,player_name,x,y,z).then(updatedGame => {
res.status(200).json(updatedGame);
}).catch(err => {
res.status(500).send(err);
});
};
Game Model
GamesModel.updatePlayer = (gameName, playerName, x, y, z) => {
return PlayersModel.findOne({name: playerName}, (err,player) => {
if (!player) throw `player not found: ${playerName}`;
if (err) throw err;
return GamesModel.findOneAndUpdate({ name: gameName, 'players._id': player._id },
{ $set: { 'players.$' : { _id: player._id, x, y, z } } },
{
projection: { players: { '$elemMatch': { _id: player._id} } },
returnNewDocument: true
},
(err, game) => {
if (err) throw err;
return game;
});
});
};
我想在控制器中返回正确的错误详细信息 .
1 回答
您可以使用 Callbacks 轻松获取 .
参考:
https://docs.nodejitsu.com/articles/getting-started/control-flow/what-are-callbacks/
https://www.tutorialspoint.com/nodejs/nodejs_callbacks_concept.htm
Controller
Model:
希望这对你有所帮助 .