如何解决res.redirect(url) 只能间歇性地工作
*** 更新如下 ***
我们将 Express/Node 与 Postgres DB 一起使用。当我启动两台服务器时,一切正常,正如预期的那样。当我打开 Chrome 并开始输入 URL:port 时,我们会在按下 Enter 键之前立即获取日志信息。在这里,一切都会返回预期值。当我按下回车键时,它会重定向到一个 /auth 页面,抓取一个令牌并返回它,但这就是它奇怪的地方:
通常,当服务器重新启动时,它会进入 res.redirect(url)
调用,然后停止。它不会返回到数据库并获取它应该提取的所有必需的 JSON 数据。如果我再重复这个过程两次(或三四次……),它将获取所有信息并允许我更新我的用户记录。此外,如果我停止/重新启动服务器,输入 URL 并按 Enter 键,然后刷新页面,一切都会按预期进行。
*** 我忘了提到这个问题直到我们开始打电话来获取令牌后才出现。如果我拿出代码找回token,就没有这个问题,导致我认为是时序问题,但是经过长时间的测试,我找不到问题所在。 ***
是否有任何关于为什么重定向有时会起作用而有时不起作用的已知问题?
涉及的脚本如下:
home.js
router.get('/',function(req,res) {
res.redirect(GET_TOKEN) });
router.get('/auth',res) {
auth_code = req.query.code
userjson = {}
userjson.full_name = 'John Doe'
userjson.email = 'johndoe@example.com'
userjson.emp_id = 12345678
userjson.app_id = 'doejohn'
userjson.is_admin = true
req.session.user = userjson
var url = '/reg'
if (!auth_code || auth_code === undefined) {
url = '/'
}
console.log("Attempting redirect")
res.redirect(url) });
registration.js
router.get('/',async function(req,res) {
userjson = req.session.user
userjson.user_id = ""
userjson.user_name_cd = ""
userjson.user_password = ""
userjson.existing_user = false
params = [userjson.app_id]
var url = 'user/' + params + '/info'
exstngRegs = await util.httpGet('exstngRegs',url)
rolecode = 'A'
userjson.rolecode = rolecode
user_name_cd = ''
button_name = 'Register'
view_name = 'registration'
if (JSON.stringify(exstngRegs) != '[]') {
userjson.existing_user = true
button_name = 'Update Registration'
userjson.user_id = exstngRegs[0].user_id
user_name_cd = 'readonly'
if (!userjson.is_deleted) {
view_name = 'regexists'
} else {
view_name = 'registration'
button_name = 'Register'
}
userjson.user_name_cd = user_name_cd
userjson.button_name = button_name
util.handleView(res,constants.registration_title,constants.registration_menu,view_name,userjson) });
失败的结果是我会在一些 userjson 信息上得到一个 ReferenceError(通常,但不总是,在 ** user_id ** (这是在用户注册时输入的输入,并在在数据库中验证并与正确的用户相关联)。
我很奇怪为什么它会向我显示一个控制台日志,表明它正在尝试重定向,但没有从那里继续前进并转到 registration.js 文件。有任何想法吗?提前致谢!
后续更新
更多地查看这段代码,我想我知道发生了什么,但不确定如何修复它。当我开始输入我的 URL 时,所有数据都会加载(控制台日志显示与数据库的连接,我有日志显示 Web 应用程序正在按预期运行)--所有这些都会发生并显示在终端 BEFORE中> 我按下 Enter
键。从本质上讲,现在一切都很好。但是,当我按下 Enter
键确认,是的,我想转到这个网页时,它运行一个 GET /,它重定向到 /auth 页面并只运行该代码,但不是包括 res.redirect(url)
。
有谁知道解决这个问题的方法,或者如何强制执行 res.redirect(url) 运行?我尝试创建一个在它之前运行的简单函数并将该重定向扔在那里,但没有骰子。帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。