【问题标题】:Express.js Server error handling (404). Server freaks out and throws exception before I'm even allowed to handle the errorExpress.js 服务器错误处理 (404)。在我被允许处理错误之前,服务器吓坏了并抛出异常
【发布时间】:2018-05-26 21:27:30
【问题描述】:

(如果重要的话,我将 Blizzard.js npm 包与 Express 结合使用。)

我正在构建一个网络应用,让用户可以搜索某个视频游戏的统计数据 角色(玩家创建的个人资料),并且由于存在不存在的用户名,因此我试图确保我的应用可以在用户搜索没有帐户的用户名时处理它。

当我查询一个不存在的用户名时,服务器并没有让我的服务器函数看到并处理它,而是在一个仅称为 node.js 的文件中抛出了一些错误(在第 369 行,内容是 @ 987654322@)。我注意到我必须在调试器中点击“恢复”两次。但是,它不会使整个服务器崩溃。在用户方面,什么都没有发生。

但是,在我的服务器调用中,我通过假设角色不存在并将其告诉用户来确保处理任何不是 200 的内容。(我知道,懒惰。我应该只在抛出 404 时才这样做,但我还没有克服这个错误)。我的 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)

【问题讨论】:

    标签: javascript node.js http express http-status-code-404


    【解决方案1】:

    不熟悉暴雪,但你有一个潜在的未处理的承诺拒绝。在.then() 之后执行.catch(console.log) 以查看是否有任何拒绝抛出的异常。

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

    例如,在本机 fetch API 错误状态代码中不会抛出错误/拒绝,但也许在暴雪中它会?只是猜测,看看就知道了! :)

    【讨论】:

      猜你喜欢
      • 2011-07-24
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      相关资源
      最近更新 更多