【问题标题】:Dynamic URL with static routing in ExpressExpress 中带有静态路由的动态 URL
【发布时间】:2018-04-03 12:57:16
【问题描述】:

我想在 Express 中静态呈现使用动态 url 的页面。

具体来说,

我有一个用户发布帖子的论坛,每个帖子都有一个动态 url,当用户点击相关的锚链接时显示帖子:

localhost:8080/posts/postNumber

我有一个静态 html 页面 localhost:8080/posts/。

我希望用户单击的动态链接呈现静态页面 localhost:8080/posts/,但显示 url localhost:8080/posts/postNumber,以便我可以将帖子编号与 AJAX 请求一起使用。

有没有什么方法可以在没有动态渲染的情况下做到这一点?

【问题讨论】:

    标签: javascript ajax express routing


    【解决方案1】:

    你可以像这样定义url参数:

    app.get('/posts/:postNumber/', function (req, res) {
       // do stuff (or not) with req.params which will have
       // {postNumer: yourValue}
    
        var options = {
            root: __dirname + '/public/',
            dotfiles: 'deny',
            headers: {
              'x-timestamp': Date.now(),
              // other headers you might want
            }
        };
    
        var fileName = 'staticFileName';
        res.sendFile(fileName, options, function (err) {
           if (err) {
             next(err);
           } else {
             console.log('Sent:', fileName);
           }
        })
    })
    

    这将匹配/posts/[anything_you_want] 并在选项中指定的目录中发送指定其fileName 的文件名。这基于此处的 express 4 文档:http://expressjs.com/en/api.html#res.sendFile

    【讨论】:

    • 我想要完成的是静态渲染页面“/posts”但没有app.request。我希望页面 /posts 像用户刚刚访问 /posts 一样呈现,但 url 仍然显示为动态
    • 对不起@mrybak3,我一定遗漏了一些东西——你可以在路由上渲染静态 HTML。然后无论posts/后面放什么,用户都会看到相同的页面。
    • 确实如此。但我要做的是有一个空白的帖子页面,然后通过 jquery 从 url 获取 postNumber,并进行 ajax 调用以从服务器检索信息并将其附加到帖子页面。您向我展示的内容有效,但没有按照我想要的方式进行。
    • 好的,我想我明白了。见编辑。您可以指定将使用的静态文件并通过 Express 的sendFile() 发送。路由总是会发送相同的页面,并且URL会有参数info。
    • 这正是我想要的。为了清楚起见,sendFile() 正在静态呈现页面,对吗?
    猜你喜欢
    • 1970-01-01
    • 2016-07-23
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2015-10-05
    • 2015-12-18
    相关资源
    最近更新 更多