2013-11-27 35 views
0

如何使我的節點js應用程序失敗安全。 我寫的數據庫查詢包裝,一些供應商(以用戶例如上班,我的控制器(路由))帶節點js的故障安全異步代碼

功能的數據庫連接:

exports.connect = function(callback) { 
    sqlClient.connect(function(err, conInfo){ 
     if (err) callback(err); 
     conInfo = 'Connection at ' + sqlClient.host + ':' + sqlClient.port + '/' 
      + sqlClient.database + ' used by ' + sqlClient.user; 
     callback(null, conInfo); 
     //runDDL(); 
    }); 
}; 

功能查詢:

exports.runQuery = function(query_str, columns, params, callback) { 
    var sqlQuery = query_str + " " + columns; 
    var query = sqlClient.query(sqlQuery, params, function(err) { 
     if (err) throw err; 
     console.log('NEW QUERY____________________'); 
     console.log(sqlQuery); 
     console.log(params); 
     if (err) throw err; 
     query.on('row', function(row, result) { 
      result.addRow(row); 
     }); 
     query.on('end', function (result) { 
      callback(null, result.rows); 
     }); 
    }); 
}; 

提供功能:

User.prototype.get = function(id, callback) { 
db.runQuery('SELECT * FROM users', 'WHERE id=$1', [id], 
    function(err, allUsers){ 
     if (err) throw err; 
     callback(null, allUsers[0]); 
}); 

};

使用在控制器:

exports.getById = function(req, res) { 
    var id = req.params.user_id; 
    userProvider.get(id, function(err, user){ 
     if (err) throw err; 
     res.send(user); 
    }); 
}; 

在任何突發情況我的服務器將打印錯誤和流程會死。如何更輕鬆地處理某些類型的錯誤,例如,讓我們考慮req.params.user_id將超過數據庫中記錄的數量。

正如你所看到的,我只是拋出錯誤throw err。是否有更多的失敗安全和有效的做法來處理錯誤,並打印給客戶可理解的信息,保持服務器的工作?

回答

2

您可以編寫帶有明確自己的錯誤處理: 參見下面的例子:

https://github.com/visionmedia/express/blob/master/examples/error/index.js

+0

我如何處理不同類型的錯誤,併發送opropriate性反應,例如當用戶訪問「/用戶/ 313'url它會失敗,我應該打印用戶錯誤'頁面未找到'。 –

+0

http://expressjs.com/guide.html#error-handling –

+1

express有inbuild錯誤處理程序。您可以使用errorHandler middlerware。 –