Как загрузить активы в файл EJS, когда у вас есть два разных основных маршрутов? - PullRequest
0 голосов
/ 01 октября 2018

У меня есть простое приложение для блогового экспресса, в котором я настроил два основных маршрута, обычные маршруты (вход в систему, публикацию, регистрацию и т. Д.) И для администратора (добавление сообщения, редактирование сообщения и т. Д.).assets, css или любые другие статические файлы не загружаются только в admin router , но, к счастью, работают в обычных маршрутах.Моя экспресс-установка выглядит следующим образом:

app.use('/admin/pages', adminPages);
app.use('/', pages);

, поэтому после изучения инструментов разработчика Chrome для обоих основных маршрутов это проблема, но я не знаю, как ее решить!это когда маршруты администратора не загружают файлы начальной загрузки или CSS: enter image description here обратите внимание, что все ресурсы имеют префикс с нежелательным (admin / pages / ...) после localhost: 3005

, ноэто работает здесь (без префикса): enter image description here

Вот моя файловая структура:

enter image description here

полный app.js:

const express = require('express'),
    app = express(),
    path = require('path'),
    mongoose = require('mongoose'),
    bodyParser = require('body-parser'),
    pages = require('./routes/pages.js'),
    config = require('./config/database'),
    expressSession = require('express-session'),
    expressValidator = require('express-validator'),
    adminPages = require('./routes/admin_pages.js');

mongoose.connect(config.database);
const database = mongoose.connection;
database.on('error', console.error.bind(console, '@@error with database:'));
database.once('open', () => {
    console.log('Connected To Database successfully');
});

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.static(path.join(__dirname, 'public')));
// app.use(express.static('public'));

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.set('trust proxy', 1);
app.use(
    expressSession({
        secret: 'keyboard cat',
        resave: false,
        saveUninitialized: true,
        cookie: { secure: true }
    })
);

app.use(require('connect-flash')());
app.use(function(req, res, next) {
    res.locals.messages = require('express-messages')(req, res);
    next();
});

app.use(
    expressValidator({
        errorFormatter: function(param, msg, value) {
            var namespace = param.split('.'),
                root = namespace.shift(),
                formParam = root;
            while (namespace.length) {
                formParam += '[' + namespace.shift() + ']';
            }
            return {
                param: formParam,
                msg: msg,
                value: value
            };
        }
    })
);

app.use('/admin/pages', adminPages);
app.use('/', pages);

const port = 3005;
app.listen(port, () => {
    console.log(`App Listening @ localhost:${port}`);
});

add_page.ejs:

<%- include('../_layouts/header') %>

    <form>
        <input type="text" />
        <input type="text" />
        <input type="text" />
        <button> submit </button>
    </form>
    <%- include('../_layouts/footer') %>

вот мои оба основных маршрута: enter image description here

1 Ответ

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

я нашел ответ.при использовании двух основных маршрутов вам нужно указать каждый маршрут к его статическому файлу, чтобы мы получили это промежуточное ПО для обычного маршрута следующим образом:

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

, поскольку у вас есть другой маршрут для admin / страниц, которого не было:

app.use('/admin/pages', express.static('public')); 

это исправило проблему: D

...