NodeJSをテストしてAPIをテストすることについての演劇があります。UnhandledPromiseRejectionWarning:未処理の約束の拒否NodeJS MSSQL
しかし、SQLからNULLカラムに関するエラーが返されると、httpコールがハングするだけで、ノードコンソールにエラーが表示されます。私はちょうどNodeJSは、クライアントにこのエラーメッセージを返すようにしたい
私が手にエラーが
node:7397) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): RequestError: Cannot insert the value NULL into column 'FeatureEntryId', table 'testdb STING.dbo.J_ProductFeaturesRelation'; column does not allow nulls. INSERT fails."
であるがSQLエラーを理解し、それは大丈夫です。
ここにコードがあります。ストアドプロシージャは、エラーがちょうど決して実際にページに通じサムスが細かい実行されている場合
//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)
};
コードが正常に動作します。ここで
がhttpMsgsの内容です:SQLのエラーは、実行機能のキャッチに巻き込まれることはなかったので、今後の参考のために
exports.show500 = function(req, resp, err) {
console.log('heree')
resp.writeHeader(500, {"Content-Type": "application/json"});
resp.write(JSON.stringify({data: "Error:" + err}))
};
exports.sendJSON = function(req, resp, data) {
if (data){
resp.writeHeader(200, {"Content-Type": "application/json"});
resp.write(JSON.stringify(data));
}
}
どうしましょう? – MrJLP
@MrJLP SQLがエラーを返した場合、httpMsgs.show500(req、resp、err)が起動しないのはなぜですか?私はそれがcatchのエラーを捕らえて、console.log( 'ffs')とコールバックを実行すると思ったでしょう。 – Adam91Holt
あなたがそれを捕まえていない 'request.execute( 'PM_InsertFeatureRelation')'は失敗するという約束です。 – naortor