javascript - ExpressJS 中的 app.use 函数如何重定向以 "/"结尾的 url?

标签 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 进行切片,作为请求的实际路径长度,重定向函数将切片函数作为其回调函数。

slice 方法有两个参数。第一个参数取第一个索引值,-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);

关于javascript - ExpressJS 中的 app.use 函数如何重定向以 "/"结尾的 url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52443500/

相关文章:

node.js - 连接两个 docker 容器nodejs和mongodb

node.js - 如何在node.jsexpress中获取url资源路径匹配?

javascript - 如何在登录和注册社交之间制定不同的宣誓流程?像谷歌oauth2.0使用passport js

使用node/express的req.body中的html multipart/form-data错误

javascript - knockout : Change observable value

javascript - 如何动态更改 Youtube 播放器 videoID

JavaScript:使用名称和默认值设置对象参数的正确方法

javascript - 将两个类传递给meteorjs点击事件?

javascript - 尝试使 hmac-sha256 与适用于 Canvas API 的 Powershell 一起使用

javascript - 发送错误后无法设置 header 。我没有调用 render()/json() 两次