【问题标题】:Making route unique to one ejs file使路由对一个 ejs 文件唯一
【发布时间】:2020-06-22 22:17:15
【问题描述】:

我想要一个像 localhost3000/hh234due 这样具有唯一 ID 的 URL 来路由到特定页面,但它正在做什么与其他路由冲突。

如何使 /:id 对一个视图唯一


    module.exports = function (app) {

        app.get('/:id', function (req, res) {
            res.render('page/index');
        });  

    }

【问题讨论】:

    标签: javascript node.js express routes ejs


    【解决方案1】:

    将特定页面路由放在通用页面之前就足够了,如下所示:

    module.exports = function (app) {
    
        app.get('/hh234due', function (req, res) {
            res.render('<your special page>');
        }); 
    
        app.get('/:id', function (req, res) {
            res.render('page/index');
        });  
    
    }
    

    【讨论】:

      【解决方案2】:

      由于路由是按顺序测试的,因此将其放在序列中最后,任何与它冲突的东西都将优先于它。

      【讨论】:

        【解决方案3】:

        一般来说,这只是一个有问题的做法,因为

        app.get('/:id', ...)
        

        匹配每条可能的顶级路线,并与您在网站运行中想要/需要的其他顶级路线发生冲突。

        您可以通过始终将其作为最后一个可能的路由定义来使其工作,但我建议将 URL 更改为类似

        http://localhost:3000/id/hh234due
        

        然后你可以使用:

        app.get('/id/:id', ...)
        

        并且与您的任何其他顶级路线没有任何冲突。

        这样做时,URL 结构也更具声明性,因为 /id 部分清楚地说明了这个 URL 是什么,而不是之前你更依赖于它看起来不像其他任何一个的事实您网站上的顶级路由,所以“我猜”它一定是一个 id,对于将来可能在该网站上工作的其他开发人员来说,它不是声明性的或清晰的。

        【讨论】:

        • 创建404页面的时候怎么办
        • 你所有的路线都被安排在不同的文件夹中
        • @coder - 我不理解这两个 cmets。我建议您使用 http://localhost:3000/id/hh234due 作为 URL 并使用 app.get('/id/:id', ...) 作为路由定义,这与 404 页面或文件夹中的路由完全无关。您可以对 404 页面或文件夹中的路由做任何您想做的事情,因为这与我的回答(或您的问题)无关。
        • @coder - 如果您对文件夹中的 404 页面或路由有不同的问题,请在完成此问题后接受答案(单击回答您问题的答案左侧的复选标记),您可以就其他主题之一提出更具体的问题。或者,如果您认为它与这个问题有关,请说明如何。
        猜你喜欢
        • 2020-08-12
        • 1970-01-01
        • 2014-12-14
        • 1970-01-01
        • 2012-12-13
        • 2012-12-04
        • 1970-01-01
        • 2012-04-24
        • 1970-01-01
        相关资源
        最近更新 更多