#javascript #node.js #express
#javascript #node.js #выразить
Вопрос:
ПРОБЛЕМА: итак, я разрабатываю экспресс-веб-приложение. И у меня есть страница корзины, к которой могут получить доступ мои клиенты, через маршрут «корневой URL / клиенты / заказы». И когда я пытаюсь получить доступ к этому маршруту, файл css и файл js не работают. Т.е. стили из файла css не работают, и файл js тоже не работает. Потому что оба их типа содержимого в заголовке запроса — «текст / html».
Я не сталкивался с этой проблемой, когда все мои маршруты расширялись на один шаг до корневого URL, например ‘корневой url / login’ или ‘корневой url / register’ или ‘корневой url / customers’, все работает нормально. Но когда я расширяю эти маршруты, например «корневой URL / клиенты / заказы», тогда я сталкиваюсь с этой проблемой. Кто-нибудь может мне помочь и почему именно это происходит?
Маршрут, который я использую для отображения этой конкретной страницы:
app.get('/customers/orders', auth, orderController().index);
PS auth — это промежуточное программное обеспечение, чтобы убедиться, что пользователь вошел в систему.
‘OrderController’ :
function orderController () {
return {
async index(req, res){
try{
const orders = await Order.find({customer :
req.user._id}).populate('customer').sort({'createdAt' : -1});
res.render('Customers/Order', {
title : "Your orders-Pizza",
orders : orders,
moment : moment,
});
} catch (err) {
if(err) {
req.flash('error', 'Sorry something went wrong. Try again.');
return res.redirect('/order');
}
}
},
}
}
}
Редактировать после осознания моей ошибки
Вот мой код для обслуживания статических файлов (именно здесь я допустил ошибку):
app.use(express.static('./public'));
Здесь я не использовал ‘/’ после public, верно? Итак, что я должен был сделать при связывании моего css-файла (или любого другого статического файла), перед именем файла включается ‘/’, например:
<link rel="stylesheet" href="/css/css.css">
И файл js:
<script src="/js/js.js" defer></script>
И вуаля!, все работает нормально.
Вывод Вы должны включить ‘/’ перед именем файла (или папки, если у вас есть файл внутри одного).
Комментарии:
1. Ваш экспресс-код маршрутизации, не видя никакого кода, нам действительно трудно понять, что вы ошиблись. 🙁 Если кода много, вам следует попробовать создать минимальный проверяемый пример проблемы.
2. Я действительно новичок во всей этой вещи с переполнением стека. Так что я не знаю, как здесь работать. Но там я включил коды. Надеюсь, это поможет вам что-то найти.
3. Помните, что если вы отображаете маршрут как ->
/customers/orders
и у вас есть ссылка в вашем htmlmain.css
, ваш браузер будет искать файл с именем/customers/orders/main.css
, я предполагаю, что ваших статических ресурсов там нет?. Чтобы обойти это, не используйте относительные пути для статических ресурсов, например ../assests/main.css
и т. Д.4. Я использую способ /assets/main.css для извлечения моих статических файлов. И, нет, это не ошибка 404. Файлы отправляются клиенту, просто браузер не хочет применять стили из этого файла из-за неправильного типа MIME.
5. Здесь все еще недостаточно подробностей, чтобы помочь, одна идея заключается в том, что одно из ваших промежуточных программ портит заголовки.