安全我有我的app.js一個方法,可處理一個GET請求,使MySQL查詢。當一切順利時,這是一個快樂的結局,但如果出現任何問題,我會得到類似的信息。處理在節點MySQL錯誤
/Users/916784/Documents/Mobile Training/Node_Ex/SimpleAPI/node_modules/mysql/lib/protocol/Parser.js:78
throw err;
^
Error: ER_BAD_FIELD_ERROR: Unknown column 'undefined' in 'where clause'
at Query.Sequence._packetToError (/Users/916784/Documents/Mobile Training/Node_Ex/SimpleAPI/node_modules/mysql/lib/protocol/sequences/Sequence.js:48:14)
at Query.ErrorPacket (/Users/916784/Documents/Mobile Training/Node_Ex/SimpleAPI/node_modules/mysql/lib/protocol/sequences/Query.js:83:18)
at Protocol._parsePacket (/Users/916784/Documents/Mobile Training/Node_Ex/SimpleAPI/node_modules/mysql/lib/protocol/Protocol.js:280:23)
at Parser.write (/Users/916784/Documents/Mobile Training/Node_Ex/SimpleAPI/node_modules/mysql/lib/protocol/Parser.js:73:12)
at Protocol.write (/Users/916784/Documents/Mobile Training/Node_Ex/SimpleAPI/node_modules/mysql/lib/protocol/Protocol.js:39:16)
at Socket.<anonymous> (/Users/916784/Documents/Mobile Training/Node_Ex/SimpleAPI/node_modules/mysql/lib/Connection.js:96:28)
at emitOne (events.js:77:13)
at Socket.emit (events.js:169:7)
at readableAddChunk (_stream_readable.js:146:16)
at Socket.Readable.push (_stream_readable.js:110:10)
--------------------
at Protocol._enqueue (/Users/916784/Documents/Mobile Training/Node_Ex/SimpleAPI/node_modules/mysql/lib/protocol/Protocol.js:141:48)
at Connection.query (/Users/916784/Documents/Mobile Training/Node_Ex/SimpleAPI/node_modules/mysql/lib/Connection.js:201:25)
at /Users/916784/Documents/Mobile Training/Node_Ex/SimpleAPI/routes/routes.js:27:22
at Layer.handle [as handle_request] (/Users/916784/Documents/Mobile Training/Node_Ex/SimpleAPI/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/916784/Documents/Mobile Training/Node_Ex/SimpleAPI/node_modules/express/lib/router/route.js:131:13)
at Route.dispatch (/Users/916784/Documents/Mobile Training/Node_Ex/SimpleAPI/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/Users/916784/Documents/Mobile Training/Node_Ex/SimpleAPI/node_modules/express/lib/router/layer.js:95:5)
at /Users/916784/Documents/Mobile Training/Node_Ex/SimpleAPI/node_modules/express/lib/router/index.js:277:22
at Function.process_params (/Users/916784/Documents/Mobile Training/Node_Ex/SimpleAPI/node_modules/express/lib/router/index.js:330:12)
at next (/Users/916784/Documents/Mobile Training/Node_Ex/SimpleAPI/node_modules/express/lib/router/index.js:271:10)
當然我知道爲什麼會出現這個錯誤,但我想要安全地處理它。目前,我的代碼是
app.get('/deleteInventoryItem', function(req, res){
console.log('requested for deleting inventory item with id: ' + req.query.item_id);
if(req.query.item_id){
app.connection.query('UPDATE ITEMS.ITEMS_TABLE SET item_isdeleted=1 WHERE id=' + req.query.item_id,
function(err, rows){
if(err){
console.log('error occured in deleting: code - ' + err.code + " ,isFatal - " + err.fatal);
next(err);
}
res.send({"status": "success",
"message": "Item deleted with id - " + req.query.item_id });
});
} else{
res.send({"status": "error", "message": "missing a parameter"});
}
});
這裏是我寫的下一個
app.use(function(err, req, res, next) {
res.status(500).send({ error: 'Something failed!' });
});
的代碼,我怎麼能處理錯誤的部分,這樣我的node.js服務器犯規崩潰? 如何發送響應貼切而不是發送整個錯誤堆棧跟蹤
我建議使用參數化查詢和 – nada
是否使用Express.js爲您的服務器驗證模塊? – xaviert
我會建議不要拋出錯誤。這是從[文檔的NodeJS(https://nodejs.org/api/errors.html)「任何使用JavaScript投機制將提高必須使用try/catch語句或Node.js的過程中會處理的異常立即退出。「 –