Установите тип содержимого X HTML в файлах stati c - PullRequest
0 голосов
/ 04 марта 2020

Я хочу иметь маршрут для моих файлов stati c:

// server.js
app.use('/', require('./routes/ui/templates'));

Дело в том, что я не могу изменить тип содержимого с html -> x html. Вот мой маршрут:

const express = require('express');
const router = express.Router();

// Path configs
const pathRoot = __dirname
const pathPublic = pathRoot + "/../../public/" 

router.use('/', express.static(pathPublic));

router.get('/', (req, res) => {
    console.log(pathPublic)
    res.sendFile('index.html', {root: pathRoot});
})

router.use((req, res, next) => {
    res.type('application/xhtml+xml');
    next();
})

module.exports = router;

Обратите внимание, что по какой-то причине, если я не добавлю router.use(...), мой индексный файл не будет обслуживаться вообще. Насколько я понимаю, написанное мною промежуточное программное обеспечение должно быть последним, поскольку я пытаюсь зафиксировать ответ и изменить его. Пожалуйста, поправьте меня, если я ошибаюсь.

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Если вы хотите управлять Content-Type для определенных c типов файлов, отправляемых express.static(), вы можете использовать опцию setHeaders, например:

app.use(express.static(path.join(__dirname, "public"), {
    setHeaders: function(res, path, stat) {
        // if file is a .xml file, then set content-type
        if (path.endsWith(".xml")) {
            res.setHeader("Content-Type", "application/xhtml+xml");
        }
    }
}));

Некоторые другие вещи, которые вы может также спрашивать о:

  1. Как только ваш маршрут express.static() соответствует файлу, дальнейшая маршрутизация не выполняется. Ответ отправлен, и ни один из следующих обработчиков маршрута не будет вызван. Таким образом, вы не можете повлиять на тип содержимого в другом месте с более поздними маршрутами.

  2. Если путь запроса маршрута /, то express.static() будет искать файл index.html в pathPublic вы передаете это. Если он найдет его, он отправит его, и дальнейшая маршрутизация не произойдет.

  3. res.type() не выполняет то, для чего вы пытаетесь его использовать. Вы передаете ему расширение файла, и оно устанавливает тип содержимого в соответствии с поиском MIME для этого расширения файла. Как вы можете видеть в моем примере кода выше, вы можете установить тип контента самостоятельно с помощью res.setHeader("Content-Type", "application/xhtml+xml").

1 голос
/ 04 марта 2020

Попробуйте res.setHeader('content-type', 'application/xhtml+xml');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...