【发布时间】:2021-12-13 01:02:39
【问题描述】:
在下面的代码中,客户端POSTs一些数据到/somewhere然后执行路由处理回调。
在回调中,我正在等待 Promise 解决,然后再将结果发送回客户端。
Promise 需要相当长的时间才能解决。这是意料之中的。
我不知道这需要多长时间,因为在 Promise 执行大约 2-3 分钟后,app.post('/somewhere') 处理程序被再次调用,即使客户端没有发出这样的请求(已检查)。在这段时间里,客户端没有任何活动,没有页面刷新,重定向..nothing。
此外,forSomethingReallySlow() 不会引发任何错误,因为节点控制台上没有记录任何相关内容。我有来自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 功能可以重新调用处理程序? 我可以禁用它吗? 还是有其他问题?提前感谢您的帮助。
【问题讨论】:
标签: javascript node.js express express-router