【问题标题】:[NodeJS]: Redirected after a route > a function called before redirect > can we redirect after function call?[NodeJS]:在路由之后重定向>在重定向之前调用的函数>我们可以在函数调用之后重定向吗?
【发布时间】:2019-04-05 14:18:03
【问题描述】:

我有如下路线,

router.get('/startjob', function(req, res) {
    var = "one";
    start();
    res.redirect('/');
}

我的启动函数会循环,需要重定向到主页,

start(){
    check = setInterval(function(){
        if(//condition){
            var = "two";
            clearInterval(check);
            // redirect to '/'
        }
    },5000);
}

我为什么要进行两次重定向是因为,我想在路由之后立即刷新主页上呈现的变量,并在 start() 函数结束时刷新

router.get('/', function(req, res) {
    res.render('index', { 
            title: 'Home',
            value: var
        });
}

由于我在函数结束之前已经在路由中进行了重定向,所以我无法在函数内重定向到主页。

我能找到的唯一解决方案是不在函数内部进行重定向,而是让页面每 5 秒左右刷新一次,我觉得这不太合适。

函数内部也有重定向的解决方法吗?

谢谢。

【问题讨论】:

  • 您可以使用node-schedulenode-cron 每5秒运行一次start() 函数,您可以相应地重定向它...

标签: node.js express redirect routing


【解决方案1】:

我可以从你的问题中推断出你想在 start() 函数的开始和结束处重定向到一个新页面。让我知道以下是否有效。

router.get('/startjob', function(req, res) {
    var = "one";
    start(res);       
}

start(res){
    res.redirect('/');
    check = setInterval(function(){
        if(//condition){
            var = "two";
            clearInterval(check);
            res.redirect('/');
        }
    },5000);
}

【讨论】:

  • 这不起作用,因为我们不能对响应进行第二次重定向。这将引发错误“发送后无法设置标头”。我现在所做的是 - 在 if 块中设置一个变量并执行 ajax 来检查变量值并相应地使用 ajax 中的 javascript 刷新页面。无论如何感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多