我正在尝试处理邮寄请求。我希望这能获得发布请求,运行查询并获取一些数据,然后修改一些变量。然后呈现index.ejs文件以及更改后的变量。
一切正常。但是这里的问题是,它首先呈现页面,然后更新页面变量。 我如何以相反的顺序进行?我想也许我应该异步更改代码。我不知道该怎么做。
app.post('/id',function (req, res) {
// Run a mysql query
con.query('SELECT * FROM new_table ORDER BY RAND() LIMIT 9',
function(error,results, fields) {
if (error)
throw error;
//update some variables here
});
// render the index.ejs file and an updated varible (ejs and express stuff)
res.render("index",{
changed_variable:changed_variable
});
});
答案 0 :(得分:0)
您只需将res.render
放入查询成功回调中,如下所示:
con.query('SELECT * FROM new_table ORDER BY RAND() LIMIT 9', function(error,results, fields) {
if (error)
throw error;
//update some variables here
res.render("index",{ changed_variable:changed_variable });
})
但是建议的方法是使用async
模块,请按照以下步骤安装它:
npm install --save async
使用async
模块,您可以编写如下内容。
router.get('/id', function(req, res) {
async.series([
con.query('SELECT * FROM new_table ORDER BY RAND() LIMIT 9', function(error,results, fields) {
if (error)
throw error;
//update some variables here
})
],
function(err, results) {
res.render("index",{ changed_variable:changed_variable });
})
})
答案 1 :(得分:0)
代码已经异步。如果要在查询完成处理后呈现页面,则应将呈现器放置在回调中。
@ComponentScan(basePackages = "put-your-base-package-name")