Промежуточное программное обеспечение Nodejs Path не работает для определенного шаблона - PullRequest
0 голосов
/ 20 марта 2019

Я использую промежуточное ПО для исправления запросов URL, которые не имеют косой черты в конце.Если последний символ пути не является / или имеет путь /js/, /stylesheets/, /images/ или sitemap.xml, то не добавляйте / в конец пути.Это работало в большинстве случаев, но по какой-то причине путь возвращает /images/footer-logo.png/ для изображения, которое у меня есть, но не имеет косой черты для /images/header_logo.svg.Это поставило меня в тупик, потому что они оба содержат один и тот же каталог, но один отображается правильно, а другой нет.Что может быть не так в моем промежуточном программном обеспечении, которое управляет этим поведением?Причина, по которой /images/ равен от === до 0, заключается в том, что console.log показывает этот путь как отличающийся от других, имеющих -1.Не уверен, почему это так.

Промежуточное программное обеспечение:

//Add trailing slash to url
router.use(function(req, res, next) {
    //Check for GET or HEAD request
    var method = req.method.toLowerCase();

    console.log(req.path)
    console.log(req.path.indexOf('/images/'))
    //If request is GET | HEAD and last path value is not '/' and path length is greater than 1 and path does not match js | css | images
    if (['get', 'head'].includes(method) && req.path.substr(-1) != '/' && req.path.length > 1 && req.path.indexOf('/js/') === -1 && req.path.indexOf('/stylesheets/') === -1 && req.path.indexOf('/images/') === 0 && req.path.indexOf('/sitemap.xml') === -1) {
        console.log("modify path")
        console.log(req.path)
        var query = req.url.slice(req.path.length);
        res.redirect(301, req.path + '/' + query);
    } else {
        next();
    }
});

.png Пример кода:

<!-- Logo -->
    <a class="d-inline-flex align-items-center mb-3" href="/">
        <img src="/images/footer-logo.png" alt="Footer Logo">
    </a>
    <!-- End Logo -->
...