Express.js服务器error handling(404)。 在我被允许处理错误之前,服务器就会发出exception并抛出exception

(如果有问题,我使用Blizzard.js npm软件包与Express一起使用。)

我正在构build一个networking应用程序,让用户search某个video游戏angular色(玩家创build的configuration文件)的统计数据,并且由于有一个用户名不存在,我试图确保我的应用程序可以处理如果用户search没有帐户的用户名。

当我查询一个不存在的用户名,而不是让我的服务器function看到和处理它时,服务器就怪异地抛出了一个只有node.js文件的错误(在第369行,其内容是runMicrotasks(); )。 我注意到我必须在我的debugging器中打“resume”两次。 但是,它不会使整个服务器崩溃。 在用户方面,没有任何反应。

然而,在我的服务器调用中,我确保通过假设angular色不存在并告诉用户来处理任何不是200的东西(我知道,懒惰,如果有404被抛出,我应该这样做,但是我没有得到过这个bug)。 我的if语句应该可以解决这个问题,但是我已经在调用中和内部设置了断点,它甚至不会触发我的断点。 服务器调用不会触发。

拨打我的服务器的代码:

 $scope.searchCharacter = function(){ $scope.charName = "obviouslyInvalidCharacterName"; $scope.selectedRealm = {name: "Dalaran", id: 66}; var request = {name: $scope.charName, realm: $scope.selectedRealm}; $http.post('/searchCharacter', request) .then(function(response) { //request body }); } 

服务器调用:

 app.post('/searchCharacter', jsonParser, function (req, res) { blizzard.wow.character(['profile', 'stats', 'items', 'statistics'], { origin: 'us', realm: req.body.realm.name, name: req.body.name }) .then(response => { if(response.status != 200){ res.send("That character doesn't exist! Please enter a valid character name."); } else { res.send(response.data); } }); }); 

错误信息:

 Error: Exception has occurred: Error Error: Request failed with status code 404 at createError (c:\Users\RDubz\Documents\Interviews\EagleDream 12-7-17\Project\node_modules\blizzard.js\node_modules\axios\lib\core\createError.js:16:15) at settle (c:\Users\RDubz\Documents\Interviews\EagleDream 12-7-17\Project\node_modules\blizzard.js\node_modules\axios\lib\core\settle.js:18:12) at IncomingMessage.handleStreamEnd (c:\Users\RDubz\Documents\Interviews\EagleDream 12-7-17\Project\node_modules\blizzard.js\node_modules\axios\lib\adapters\http.js:191:11) at emitNone (events.js:72:20) at IncomingMessage.emit (events.js:166:7) at endReadableNT (_stream_readable.js:921:12) at nextTickCallbackWith2Args (node.js:442:9) at process._tickCallback (node.js:356:17) 

不熟悉暴雪,但你有一个潜在的未处理的承诺拒绝。 在.catch(console.log) .then()做一个.catch(console.log)来查看是否有任何抛出exception的拒绝。

这可能是因为你没有注意API的细微差别(或者文档不好)。

例如,在原生提取API错误状态代码不会抛出错误/拒绝,但也许在这个暴雪一个它呢? 只是一个猜测,检查出来,看看! 🙂