Почему не удается загрузить CSS с помощью модуля jsdom для NodeJS - PullRequest
0 голосов
/ 31 октября 2018

В моем локальном файле приложения NodeJS я пытаюсь загрузить HTML-файл с помощью ссылки CSS с помощью модуля jsdom и затем отобразить его в браузере следующим образом

var http = require('http'),
fs = require('fs'),
jsdom = require('jsdom');

http.createServer(function(req, res) {

    if (req.url === '/favicon.ico') {
        res.writeHead(404);
        res.end();
        return;
    }

    res.writeHead(200, {'Content-Type': 'text/html; charset=utf8'});

    var indexPageHTML = fs.readFileSync('index.html');
    var document = new jsdom.JSDOM(indexPageHTML,{resources: "usable"}).window.document;
    var indexPageHTML = '<!doctype html><html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>';

    res.end(indexPageHTML);

}).listen(80, 'localhost');

Мой index.html

<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
Some text
</body>
</html>

Но CSS все еще не загружен, и я все еще получаю предупреждение

Ресурс интерпретируется как таблица стилей, но передается с типом MIME. text / html: "http://localhost/style.css".

Как должен работать параметр resources: "usable"? Который упоминается по ссылке https://www.npmjs.com/package/jsdom#basic-options

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Лучше установить модуль serve-static

И если мы хотим получить страницу с тем же именем, что и URL-адрес запроса (например, получить another.html при переходе по ссылке с href="/another"), достаточно добавить

if(req.url != '/' && !~req.url.indexOf('.')) {
    req.url = req.url+'.html';
}

перед строкой

serve(req, res);
0 голосов
/ 31 октября 2018

Это просто потому, что ваш http-сервер возвращает ошибку 404 для /favicon url и ту же html-страницу для каждого другого запроса. Когда вы впервые загружаете страницу в браузере, ваш браузер анализирует тег <link rel="stylesheet" href="style.css"> и отправляет еще один запрос на ваш сервер. Но ваш сервер снова возвращает ту же HTML-страницу, а не стили.

...