【问题标题】:How app.use function in ExpressJS redirects urls ending with "/"?ExpressJS 中的 app.use 函数如何重定向以“/”结尾的 url?
【发布时间】:2019-02-25 20:24:18
【问题描述】:

此代码会将所有以“/”结尾的 URL 重定向到相同的 URL,但没有“/”。例如,如果用户导航到http://localhost:3000/about/,他们将被重定向到http://localhost:3000/about。这将使 HTML 文件中的图像 URL 和内容始终正常工作。

        var express = require('express');
        var app = express();
        app.use(function (req, res, next) {  
            if (req.path.substr(-1) == '/' && req.path.length > 1) {
        var query = req.url.slice(req.path.length);  
res.redirect(301, req.path.slice(0, -1) + query);
 } else {
                next();
            }
});

谁能解释一下这段代码里面发生了什么。据我了解,如果请求的路径最后索引等于 / 并且请求的路径长度大于 1,则必须执行以下代码。

因此,如果满足条件,则根据请求的实际路径长度的参数查询变量切片请求的 url,重定向函数将切片函数作为其回调函数。

slice 方法有两个参数。第一个参数采用第一个索引值,-1 采用最后一个索引值。它还将结果包含在查询变量中。

【问题讨论】:

  • 将代码块与问题文本分开。 cmets 中的问题很难阅读。还请使用一致的缩进格式化您的代码(也是为了便于阅读)。
  • 但到目前为止,理解这段代码的最好方法是在 the debugger 中单步执行。

标签: javascript node.js express handlebars.js


【解决方案1】:

最好的解决方案是使用这个包

$ npm install connect-slashes

https://www.npmjs.com/package/connect-slashes

那么你可以像下面这样使用

var connect = require("connect")
  , slashes = require("connect-slashes");

connect()
  .use(connect.logger())
  .use(connect.static())
  .use(slashes(false))
  .listen(3000);

【讨论】:

  • slashes(false),在这种情况下。
猜你喜欢
  • 2014-05-16
  • 2018-11-06
  • 1970-01-01
  • 2017-02-05
  • 2018-05-07
  • 1970-01-01
  • 2011-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多