我想知道在发生内部服务器错误时,在NodeJS Express应用程序中进行服务器响应的正确方法是什么。这是一些注册用户的简化代码。主要问题是,如果发生内部服务器错误,我想记录错误,但也用不同的消息响应客户端。我下面的内容是我目前的解决方案,但我觉得我没有正确地做到这一点(或者不遵循传统方式)。我目前有一个从路由调用的异步瀑布设置。
//Controller.js
function verifyInputs(user, resCallback, callback) {
//verify user inputs (ie. passwords match)
if (valid) {
callback(null)
} else {
resCallback('whatever was wrong with inputs', 409)
callback('ok')
}
}
function checkIfUserExists(user, resCallback, callback) {
db.getPool().getConnection((err, connection) => {
if (err) {
resCallback('custom response error message', 500)
callback(err)
return
}
var sql = 'SELECT...'
connection.query(sql, (err, results) => {
connection.release()
if (err) {
resCallback('another custom response error', 500)
callback(err)
return
}
if (results.length > 0) {
resCallback('user already exists')
callback('ok')
}
})
)
}
module.exports.registerNewUser(user, callback) {
async.waterfall([
async.apply(user, callback, verifyInputs),
async.apply(user, callback, checkIfUserExists)
],
function(err, reults) {
if (err === 'ok') return
//log error or whatever here
})
}
从路由功能调用此寄存器功能:
//Router.js
router.post('/register', (req, res, next) => {
var newUser = //get user data from req
controller.registerNewUser(newUser, (msg, statusCode) => {
res.statusCode(statusCode)
res.send(msg)
})
})
上面的代码显示了在使用其他消息响应客户端时如何记录错误。这是正确的还是可行的方法?
或者也许我根本不应该使用瀑布,并做这样的事情,这样我就可以在没有多个回调的情况下访问所有阶段的res对象:
router.post('/register', verifyInputs(), checkIfUserExists(), (req, res, next) => {
var newUser = //get user data from req
controller.registerNewUser(newUser, (msg, statusCode) => {
res.statusCode(statusCode)
res.send(msg)
})
})
我对服务器后端编程比较陌生,我是NodeJS和Express的新手。我只是想确定我正在做的事情。