ExpressJS中的app.use函数如何重定向以“ /”结尾的网址?

时间:2018-09-21 12:12:22

标签: javascript node.js express handlebars.js

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

        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作为请求的实际路径长度来对所请求的url进行切片,重定向功能会将slice函数作为其回调函数。

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

1 个答案:

答案 0 :(得分: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);