ExpressJS не применяет CSS на определенных маршрутах

#javascript #html #css #node.js #express

Вопрос:

Когда я захожу в localhost:3000 свой css, он работает, но когда я захожу в localhost:3000/r/test свой css, он не работает, и я получаю это сообщение:

 Refused to apply style from 'http://localhost:3000/r/styles.css' because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.  

Всякий раз, когда у меня есть маршрут, где путь длиннее, чем один дополнительный путь (я не уверен, что это даже правильный термин), мой css вообще не работает. Например, эти маршруты будут работать:

 app.get('/', (req, res) =gt; {  ... ) app.get('/cats', (req, res) =gt; {  ... ) app.get('/dogs', (req, res) =gt; {  ... )  

Но это не сработает:

 app.get('/cats/test', (req, res) =gt; {  ... ) app.get('/dogs/blah', (req, res) =gt; {  ... ) app.get('/hamster/foo', (req, res) =gt; {  ... )  

Мой index.js файл:

 const express = require('express'); const path = require('path'); const axios = require('axios'); const app = express();  app.set('view engine', 'ejs'); app.set('views', path.join(__dirname   '/views'));  app.use(express.static(path.join(__dirname, 'public')));  app.get('/', (req, res) =gt; {  res.render('home'); });  app.get('/r/test', (req, res) =gt; {  res.render('test'); });  app.listen(3000, () =gt; {  console.log(`Listening at http://localhost:3000`); });  

Мой файл test.ejs:

 lt;!DOCTYPE htmlgt; lt;html lang="en"gt; lt;headgt;  lt;meta charset="UTF-8"gt;  lt;meta http-equiv="X-UA-Compatible" content="IE=edge"gt;  lt;meta name="viewport" content="width=device-width, initial-scale=1.0"gt;  lt;link rel="stylesheet" href="styles.css"gt;  lt;titlegt;Testlt;/titlegt; lt;/headgt; lt;bodygt;  lt;h1gt;Hilt;h1gt; lt;/bodygt; lt;/htmlgt;  

Структура моего проекта такова:

 Project  |   -- public  | |  |  --styles.css  |   -- views  | |   |  -- home.ejs  |  -- test.ejs  |   --index.js  

Ответ №1:

Поместите файл CSS в общий каталог и добавьте / href ссылку, например

 lt;link rel="stylesheet" href="/styles.css"gt;  

Теперь он будет запрашивать localhost:3000/style.css каждый раз, независимо от того, на каком URL вы находитесь.

/ укажите на корневой каталог

Ответ №2:

Было бы лучше иметь отдельный путь для обслуживания статических файлов

Измените статический путь на

app.use('/static',express.static(path.join(__dirname, 'public')));

и в файле ejs используйте его как

lt;link rel="stylesheet" href="/static/styles.css"gt;