#javascript #node.js #mongodb #express
#javascript #node.js #mongodb #экспресс
Вопрос:
У меня есть код, который
а) обрабатывает маршрут POST,
б) использует API для генерации токена доступа и рендеринга страницы, и
в) запускает код с интервалом.
Проблема в том, что первый экземпляр работает нормально, но во втором экземпляре я получаю ERR_HTTP_HEADERS_SENT
ошибку. Мой код:
app.post("/intervalQuote",(req,res)=>{
MongoClient.connect(url,{ useNewUrlParser: true, useUnifiedTopology: true }, (err,db)=>{
if (err) throw err;
const dbo = db.db('ameritrade');
const ticker = req.body.ticker.toUpperCase();
function intervalTimer() {
access_token(dbo).then((access_token)=>{
quote(access_token,ticker).then((quote)=>{
res.render('quote',{result: quote});
})
})
}
intervalTimer();
setInterval(intervalTimer,10*1000);
})
})
Мне нужно иметь возможность запускать access_token
, а затем quote
выполнять функции перед рендерингом quote
шаблона. Как я могу сделать это с интервалом и перезагрузить страницу? Большое спасибо за помощь / предложение!
Ответ №1:
Ошибка ERR_HTTP_HEADERS_SENT вызвана отправкой ответа несколько раз res.render('quote',{result: quote});
в setInterval(intervalTimer,10*1000);
. Согласно документации ExpressJS, res.render отправляет клиенту отображенную строку HTML.
После того, как вы отправили ответ клиенту, вы не можете отправить другой ответ, как сказано здесь . res.render
Функция завершает цикл запроса-ответа.
Подводя итог, не устанавливайте интервал для повторного отображения статического HTML.
Комментарии:
1. Спасибо, Хосе! Я все еще в недоумении относительно того, как действовать дальше. Если вы знаете, какие темы я должен осветить, чтобы получить представление, это было бы оценено
Ответ №2:
Неважно, я понял это. Дух, мой мозг был заморожен. Все, что мне нужно было сделать, это переместить функцию setInterval на сторону клиента. Спасибо всем за то, что посмотрели на вопрос!