CSS отправляет неправильно при добавлении дочерних сайтов в Express. js - PullRequest
1 голос
/ 05 февраля 2020

Пожалуйста, имейте в виду, что я новичок ie в Express материал и c.

У меня есть проблема, что CSS не загружается для того, что я называю " sub-sites ".

Под под-сайтами я имею в виду адреса с как минимум 2 слешами, например domain.com/site/subsite.

Я использую приложение Express:

const express = require(`express`);
const app = express();
const port = 80;

app.use(express.static(__dirname + `/public_html`)); // For serving CSS & JS to websites

app.get(`/`, (req, res) => { // Root domain
    res.sendFile(__dirname + `/public_html/index.html`)
});

app.get(`/website`, (req, res) => { // Another, example site
    res.sendFile(__dirname + `/public_html/website1.html`)
});

app.get(`*`, (req, res) => { // For 404
    res.sendFile(__dirname + `/public_html/404.html`, 404)
});

app.listen(port, () => console.log(`App listening on port ${port}!`));

В этом случае CSS & JS работают просто отлично.

Однако, , когда я делаю:

app.get(`/website/subsite`, (req, res) => { // A website with 2 slashes in it
    res.sendFile(__dirname + `/public_html/website2.html`)
});

даже при отсутствии кода изменен с обычного, CSS или JS не отправляйте с веб-сайта.

Я должен также упомянуть, что все мои файлы находятся в папке public_html:

ProjectDirectory:
  |> server.js
  |> package.json
  |> package-lock.json
  |> public_html/:
    |> index.html
    |> website1.html
    |> website2.html
    |> css/:
      |> index.css // Corresponding css file to index.html
      |> website1.css
      |> website2.css
    |> js/:
      |> ...

На каждой html странице есть тег link: <link rel="stylesheet" href="./css/*correct file*.css">

Это также происходит при вводе / веб-сайта /, а не только /website.

ошибка, которая появляется при загрузке суб-сайтов:

Отказался от применения стиля из 'URL', потому что его тип MIME ('text / html') не является поддерживаемым типом MIME таблицы стилей, и строгая проверка MIME включена. Я серьезно испробовал много решений, но не смог найти правильного.

Если вы не понимаете мою проблему, пожалуйста, объясните, как правильно включить файлы css & js в ExpressJS.

Спасибо за помощь!

1 Ответ

1 голос
/ 05 февраля 2020

Проблема в этой строке в html файлах: <link rel="stylesheet" href="./css/*correct file*.css">. Запрос на файл css передается относительно текущего URL-адреса из-за . / Css /[...]. Измените строку, чтобы использовать абсолютные пути из домена root, например, <link rel="stylesheet" href="/css/*correct file*.css"> (обратите внимание на отсутствующую точку перед первым sla sh).

Это также устраняет проблему с /website/, потому что конечный sla sh изменял путь для css на /website/css/website1.css, который не мог быть решен сервером express.

. js

const express = require(`express`);
const app = express();
const port = 80;

app.use(express.static(__dirname + `/public_html`)); // For serving CSS & JS to websites

app.get(`/`, (req, res) => { // Root domain
    res.sendFile(__dirname + `/public_html/index.html`)
});

app.get(`/website`, (req, res) => { // Another, example site
    res.sendFile(__dirname + `/public_html/website1.html`)
});

app.get(`/website/subsite`, (req, res) => { // A website with 2 slashes in it
    res.sendFile(__dirname + `/public_html/website2.html`)
});

app.get(`*`, (req, res) => { // For 404
    res.sendFile(__dirname + `/public_html/404.html`, 404)
});

app.listen(port, () => console.log(`App listening on port ${port}!`));

примерный сайт1. html

<!DOCTYPE html>

<head>
    <link rel="stylesheet" href="/css/website1.css">
</head>

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