CSS не может загрузиться из-за MIME-типа на одной странице, но отлично работает на другой странице - PullRequest
0 голосов
/ 25 октября 2018

У меня есть экспресс-приложение, которое отображает шаблоны усов.На одном из моих маршрутов шаблон рендерится просто отлично, но на другом CSS не применяется, потому что он имеет тип MIME text / html (говорит консоль Chrome).

Вот как я настраиваю свой экспрессприложение:

const app = express();
app.use(express.static(__dirname + '/public'));
app.use(
    cookieSession({
        maxAge: 30 * 24 * 60 * 60 * 1000,
        keys: [
            process.env.COOKIE_KEY_1,
            process.env.COOKIE_KEY_2,
            process.env.COOKIE_KEY_3
        ]
    })
);
app.use(passport.initialize());
app.use(passport.session());
app.engine('mst', mustacheExpress(__dirname + '/views/partials', '.mst'));
app.set('views', __dirname + '/views', '.mst');
app.set('view engine', 'mst');

Вот маршруты.'/' отлично работает с CSS, но ошибка MIME-типа появляется с '/user/profile'.

app.get('/', (req, res) => {
    res.render('home', {
        user: req.user,
        title: 'Home'
    });
});
app.get('/user/profile', (req, res) => {
    res.render('profile', {
        user: req.user,
        title: 'Profile'
    });
});

А вот частичное усы, которое я использую в качестве заголовка.Это где я называю CSS.Обратите внимание, что Bootstrap CSS работает нормально.Проблема, которая у меня есть, касается и styles.css, и login.css.

<!DOCTYPE html>
<html lang="en" dir="ltr">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <title>{{title}}</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
        <link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
        <link rel="stylesheet" type="text/css" href="css/styles.css">
        {{#login}}
            <link rel="stylesheet" type="text/css" href="css/login.css">
        {{/login}}
    </head>
    <body>
        <header>
            <nav class="navbar navbar-expand-lg navbar-light bg-light">
                <a class="navbar-brand" href="/">Navbar</a>
                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>

                <div class="collapse navbar-collapse" id="navbarSupportedContent">
                    <ul class="navbar-nav ml-auto">
                        {{#user}}
                            <li class="nav-item dropdown" id="header__dropdown">
                                <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                    {{user.name}}&nbsp;&nbsp;
                                    <img class="user__pic" src="{{user.pic}}" alt="Profile picture" />
                                </a>
                                <div class="dropdown-menu" aria-labelledby="navbarDropdown">
                                    <a class="dropdown-item" href="/user/profile">Profile</a>
                                    <a class="dropdown-item" href="/user/settings">Settings</a>
                                    <div class="dropdown-divider"></div>
                                    <a class="dropdown-item" href="/logout">Logout</a>
                                </div>
                            </li>
                        {{/user}}
                        {{^user}}
                            {{^login}}
                                <li class="nav-item">
                                    <a href="/login" class="btn btn-outline-secondary" role="button">Login</a>
                                    <a href="/login" class="btn btn-danger" role="button">Sign up</a>
                                </li>
                            {{/login}}
                        {{/user}}
                    </ul>
                </div>
            </nav>
        </header>

Я пробовал несколько вещей, таких как удаление node_modules и переустановка, но в итоге я просто не понимаю.Я не могу найти разницу в том, как я объявляю эти маршруты.Любая помощь будет высоко ценится!

Спасибо

1 Ответ

0 голосов
/ 25 октября 2018

ОК, я нашел решение.В моем HTML-заголовке я вызываю CSS-файлы, используя строку 'css / styles.css', поэтому сервер будет следовать этому маршруту не из корня сервера, а по URL-адресу следующего маршрута.

Так что для моего домашнего маршрута ('/') он работает нормально, сервер ищет «/css/styles.css», но для моего профиля («/ user / profile») он искал «/user / css / styles.css '.

Поэтому решение состояло в том, чтобы вызвать CSS в моем заголовке HTML с абсолютным путем, а не с относительным.«/css/styles.css» вместо «css / styles.css».

...