在您的情况下,我会将数据库调用分成多个单独的调用,并利用
next中间件功能。
它看起来像:
function findStudent(req, res, next) { var dbRequest = 'SELECt * FROM Students WHERe IDCard = '' + req.query['id'] + '''; db.all(dbRequest, function(error, rows) { if(rows.length !== 0) { req.students = rows; return next(); } res.render('incorrect_student'); });}function findGroups(req, res, next) { dbRequest = 'SELECt * FROM Groups WHERe Name = '' + req.query['group'] + '''; db.all(dbRequest, function(error, rows) { req.groups = rows; next(); } });}function renderStudentsPage(req, res) { res.render('student', { students: req.students, groups: req.groups });}app.get('/student', findStudent, findGroups, renderStudentsPage);当您获得GET时
/student,您首先要打电话
findStudent。一旦数据库调用完成,它将呈现错误页面,或调用next()。调用next转到下一个函数,
findGroups然后调用
renderStudentsPage。您可以在向下移动功能行时将数据存储在req对象上。
希望这会有所帮助,这里是更多信息:http :
//expressjs.com/guide/using-
middleware.html
编辑/注释:
我之前没有提到它,但是如果在调用时传递参数
next(),则会触发错误处理状态。约定表明
next()没有参数,除非遇到错误实例。
您希望将UI呈现方面与数据库调用分开,因此,进一步讲,您的代码可能类似于:
function findStudent(req, res, next) { var dbRequest = 'SELECt * FROM Students WHERe IDCard = '' + req.query['id'] + '''; db.all(dbRequest, function(error, rows) { if (error || !rows.length) { return next(error); } req.students = rows; return next(); });}然后在代码的其他地方,您可以处理呈现错误页面。



