每20秒运行一次JavaScript计时器时,我在Express.js应用上收到“ 504网关超时”错误。
这是我的Express.js侦听器和计时器:
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => res.send('ok.'))
var listener = app.listen(process.env.PORT, function() {
console.log('Your app is listening on port ' + listener.address().port);
});
var items = [
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
]
let forParallel = require('node-in-parallel');
var request = require('sync-request');
setInterval(function() {
forParallel(items, function(listItem) {
request("GET", "https://example.com/?i=" + listItem);
console.log("Done.");
}, function () {
});
}, 20000);
因此,如您所见:我使用node-in-parallel每20秒并行地在数组items
上循环...每次循环迭代都应向"https://example.com/?i=" + listItem
发出GET请求。 ..
所以.. Express.js在第一次启动计时器之前运行良好!但是当计时器启动时Express.js返回“ 504网关超时错误”
Express.js侦听器不是异步的吗?
编辑:请注意,GET请求的过程会花费一些时间(例如,每次迭代需要30秒),因为它的工作量很大。
答案 0 :(得分:1)
根据评论,问题在于同步请求阻止了路由侦听器在适当的时候应答。