【问题标题】:Express JS redirect to default page instead of "Cannot GET"Express JS 重定向到默认页面而不是“无法获取”
【发布时间】:2014-10-02 17:11:29
【问题描述】:

我正在使用 express JS,并且我有一组路由,我定义如下

require('./moduleA/routes')(app);
require('./moduleB/routes')(app);

等等。如果我尝试访问上述路由中未定义的任何路由,请说

http://localhost:3001/test

它说

Cannot GET /test/

但不是这个,我想重定向到我的应用程序的索引页面。我希望这种重定向发生在所有未定义的路由上。我怎样才能做到这一点?

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    尝试添加以下路线作为最后一条路线:

    app.use(function(req, res) {
        res.redirect('/');
    });
    

    编辑:

    经过一番研究,我得出结论,最好使用app.get 而不是app.use

    app.get('*', function(req, res) {
        res.redirect('/');
    });
    

    因为app.use 处理所有HTTP 方法(GETPOST 等),并且您可能不希望将未定义的POST 请求重定向到索引页面。

    【讨论】:

    • @Srivathsa 不客气)对不起我的轻率回答,最好使用app.get。看看我编辑的答案。
    • 谢谢!有帮助
    【解决方案2】:

    在您的所有 get 处理程序(如下所示)之后,只需尝试将一个 get 处理程序与 * 放在一起。

    app.get('/', routes.getHomePage);//When `/` get the home page
    
    app.get('/login',routes.getLoginPage); //When `/login` get the login page
    
    app.get('*',routes.getHomePage); // when  any other of these both then also homepage.
    

    但要确保*毕竟应该是,否则在*处理程序之后的那些将不起作用。

    【讨论】:

    • 仅供参考:此解决方案导致duplicate content,因为会有多个具有相同内容的页面,这对 SEO 不利。最好使用 HTTP 重定向。
    【解决方案3】:

    HTML 文件是:

    <form class="" action="/fail" method="post">
            <button type="submit" name="button">Redirect to Homepage!</button>
    </form>
    

    您的 Node.js 代码将是:

    app.post("/fail", (req, res)=>{  
      res.redirect("/"); 
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-26
      • 2021-11-14
      • 1970-01-01
      • 2017-07-18
      • 1970-01-01
      • 2012-09-11
      • 2020-08-22
      相关资源
      最近更新 更多