Я пытаюсь обработать почтовый запрос. Я хочу, чтобы это получило сообщение с требованием, запустило запрос и захватило некоторые данные, а затем изменило несколько переменных. Затем визуализируйте файл 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
});
});
Я также предлагаю вам взглянуть на npmjs.com/package/async
Большое спасибо, чувак. Я пробовал много чего, но был слишком туп, чтобы не попробовать это. Помещение res.render в обратный вызов успешного запроса сработало!





Вы можете просто поместить свой 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 });
})
})
Код уже асинхронный. Если вы хотите отобразить страницу после завершения обработки запроса, вы должны поместить визуализацию внутри обратного вызова.
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
});
})
Вы пытались поместить
res.renderв обратный вызов успешного запроса?