Как функция app.use в ExpressJS перенаправляет URL-адреса, заканчивающиеся на «/»? - PullRequest
0 голосов
/ 21 сентября 2018

Этот код перенаправит все 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 принимает последнее значение индекса.Он также включает результат в переменную запроса.

1 Ответ

0 голосов
/ 21 сентября 2018

Лучшим решением было бы использовать этот пакет

$ 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);
...