【问题标题】:Node/Express Rest API - How to throw an error from mssqlNode/Express Rest API - 如何从 mssql 抛出错误
【发布时间】:2016-02-04 14:23:32
【问题描述】:

我对 javascript 和 Node/Express 都很陌生,这可能是一个新手问题,但这里是……

我正在构建一个 Rest API,并希望从此函数中 throw new Error(err.message)

function hentForfatter(id, callback) {

        sql.connect(config, function(err) {

        if(err) {
            console.log(err);
            callback(err);
        }

        new sql.Request().query('SELECT * from Forfatter where ForfatterID = ' + id).then(function(recordset) {
            callback(recordset[0]);
        })

        .catch(function(err) {
            console.log(err);
            callback(err);
        });

    });
}

...所以我可以在我的 Express API 路由中执行此操作:

router.get('/:forfatterid/quizer/:quiz_id', function(req, res, next) {

    try {
        db.hentQuiz(1, function(result) {
            res.setHeader('Content-Type', 'application/json');
            res.send(JSON.stringify(result));
        });
    } 

    catch (error) {
        res.status(404).send(error)
    }

});

我无法理解如何做到这一点......有人可以帮忙吗? :)

【问题讨论】:

  • 请看this是否有用?
  • 请告诉我们您也在使用哪些库

标签: javascript sql-server node.js rest express


【解决方案1】:

在节点中,有一个约定,回调的第一个参数应该是潜在的错误。

function hentForfatter(id, callback) {

  sql.connect(config, function(err) {

    if(err) {
        console.log(err);
        return callback(err); //notice the return statement
    }

    new sql.Request().query('SELECT * from Forfatter where ForfatterID = ' + id).then(function(recordset) {
        callback(null, recordset[0]); //notice I send null for the error
    })

    .catch(function(err) {
        console.log(err);
        callback(err);
    });

  });
}

(我不知道你是如何从db.hentQuizhentForfatter。)

router.get('/:forfatterid/quizer/:quiz_id', function(req, res, next) {

  db.hentQuiz(1, function(err, result) {

    if(err) return res.status(404).send(error);

    res.setHeader('Content-Type', 'application/json');
    res.send(JSON.stringify(result));
  });
});

【讨论】:

  • 谢谢,看来我会使用错误作为回调参数而不是 try/catch 模式来寻求您的解决方案。只是想找出在这种情况下进行错误处理的“正确”方法。
【解决方案2】:

如果使用回调,请尝试使用两个参数:

callback(err, result)

然后检查 errresult

另外看看承诺链是如何工作的。

【讨论】:

    猜你喜欢
    • 2019-05-21
    • 2021-06-21
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 2016-01-11
    • 2018-05-06
    相关资源
    最近更新 更多