在下面的代码中,客户端POST
将一些数据发送给/somewhere
,然后执行路由处理程序回调。
在回调中,我正在等待Promise
来解决之前,我发送一些结果回给客户端。
承诺将需要相当长的时间来解决。
我不知道它需要多长时间,因为在大约2-3分钟进入承诺执行app.post('/somewhere')
处理程序再次调用,即使客户端没有这样的请求(检查)。在此期间,客户端上没有任何活动,没有页面刷新,重定向…什么都没有。
同样,forSomethingReallySlow()
不会抛出错误,因为Node控制台没有记录任何相关信息。我有大量的日志从forSomethingReallySlow()
,一切工作正常,直到处理程序再次调用和forSomethingReallySlow()
重启。
app.use(cors({
origin: '*',
credentials: true,
optionSuccessStatus: 200
}))
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', 'http://localhost:4200')
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization')
res.header('Access-Control-Allow-Methods', 'POST, GET')
next()
})
app.use(cookieParser())
app.use(bodyParser.json({limit: "50mb"}));
app.use(bodyParser.urlencoded({limit: "50mb", extended: true, parameterLimit:50000}))
app.use(session({
secret: 'googoogaga',
resave: false,
saveUninitialized: false
}))
app.use(passport.initialize())
app.use(passport.session())
passport.use(new FacebookStrategy({
clientID : FACEBOOK_APP_ID,
clientSecret : FACEBOOK_APP_SECRET,
callbackURL : "http://localhost:4200/facebook/callback",
profileFields : ['id']
}, async(accessToken, refreshToken, profile, done) => {
let facebookId = profile.id
let userInDb = await DB.getUser()
if (userInDb && userInDb.facebookId === facebookId) {
await DB.updateUser({ accessToken })
done(null, userInDb)
} else {
let newUser = await DB.updateUser({ facebookId, accessToken })
done(null, newUser)
}
}))
passport.serializeUser(function(user, done) {
done(null, user)
})
passport.deserializeUser(function(user, done) {
done(null, user)
})
app.post('/somewhere', ensureLoggedIn('/auth/facebook'), jsonParser, async function(req, res){
console.log('new POST request at: ', new Date())
let result = await forSomethingReallySlow(req.body)
res.status(200).send({ result })
})
是否有一些内部Express功能,如果需要太长时间才能响应,则重新调用处理程序?我能禁用它吗?还是有其他问题?提前感谢您的帮助。
Oooooo 2分钟听起来非常接近express的默认超时设置120秒!你可以试试这个res.connection.setTimeout(0);在函数开始的时候?