UnhandledPromiseRejectionWarning:未处理的承诺拒绝NodeJS MSSQL

时间:2017-05-07 07:52:27

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

我正在尝试测试一些NodeJS设置API。

但是,当SQL返回有关NULL列的错误时,我的http调用只会挂起,您可以在节点控制台中看到错误。

我得到的错误是

  

node:7397)UnhandledPromiseRejectionWarning:未处理的承诺   rejection(rejection id:2):RequestError:无法插入值   在列' FeatureEntryId',表' testdb中为NULL   STING.dbo.J_ProductFeaturesRelation&#39 ;;列不允许空值。   INSERT失败。"

理解SQL错误,这很好我只想让NodeJS将此错误消息返回给客户端。

这是代码。

# at the top
from cython.operator cimport dereference

# later
dereference(matcher).knnMatch(src_gpu,src_gpu_2,matches,2)

如果存储过程运行正常,则代码可以正常工作,但错误实际上从未实际存在到页面中。

以下是httpMsgs的内容:

//Add or update feature relations
var insertFeatureRelation = (callback, productid, featureid) => {
    console.log(productid + ' ' + featureid)
    var conn = new sql.Connection(settings.dbConfig())
    conn.connect().then(function (conn) {
        var request = new sql.Request(conn);
        request.input('productid', sql.VarChar, productid);
        request.input('featureid', sql.VarChar, featureid);
        request.execute('PM_InsertFeatureRelation').then(function (recordsets, returnValue, affected) {
            callback(recordsets)
        })
    }).catch(function (err) {
        console.log('ffs');
        callback(null, err);
    });
}
exports.insertFeatureRelation = function (req, resp, productid, featureid) {
    insertFeatureRelation(function (data, err) {
        if (err) {
            httpMsgs.show500(req, resp, err)
        } else {
            httpMsgs.sendJSON(req, resp, data)
        }
        resp.end();
    }, productid, featureid)
};

1 个答案:

答案 0 :(得分:0)

供将来参考...节点挂起的原因是因为SQL的错误从未在执行函数的catch中捕获。

这是更新的代码。

//Add or update feature relations
var insertFeatureRelation = (callback, productid, featureid) => {
    console.log(productid + ' ' + featureid)
    var conn = new sql.Connection(settings.dbConfig())
    conn.connect().then(function (conn) {
        var request = new sql.Request(conn);
        request.input('productid', sql.VarChar, productid);
        request.input('featureid', sql.VarChar, featureid);
        request.execute('PM_InsertFeatureRelation').then(function (recordsets, returnValue, affected) {
            callback(recordsets)
        }).catch(function (err) {
            console.log(err);
            callback(null, err);
        })
    }).catch(function (err) {
        console.log(err);
        callback(null, err);
    });
}
exports.insertFeatureRelation = function (req, resp, productid, featureid) {
    insertFeatureRelation(function (data, err) {
        if (err) {
            httpMsgs.show500(req, resp, err)
        } else {
            httpMsgs.sendJSON(req, resp, data)
        }
        resp.end();
    }, productid, featureid)
};