#javascript #html #node.js #ejs
#javascript #HTML #node.js #ejs
Вопрос:
У меня есть простое приложение nodejs со структурой папок, подобной этой (не полная структура, но достаточно для этого вопроса).
index.js
views
- index.ejs
- about.ejs
В index.js
, у меня есть
app.use("/", (request, response) => {
response.render('index')
})
app.use("/about", (request, response) => {
response.render('about')
})
// Also tried with extension (index.ejs and about.ejs)
В index.ejs
, у меня есть
<a href = "../about"> About </a>
Проблема
- Когда я перехожу к корневому URL (
localhost:port/
), отображается index.ejs. - В index.ejs я нажимаю на ссылку
About
, URL-адрес изменяется на (localhost:port/about
), ноabout.ejs
не отображается. Однако проверка источников F12 в браузере (Microsoft Edge Chrominum)about.ejs
находится там. - Когда я перехожу по ссылке напрямую, вводя URL в строку url,
index.js
отображается. Поведение (в F12 / sources) такое же, как и в шаге 2. - Когда я комментирую (
app.use("/")
блокируюindex.js
), about.ejs доступен и отображается на экране. - Обратите внимание, что навигация работает отлично, если они представляют собой HTML-страницы и обслуживаются node.js сервер. Все было протестировано только на локальном сервере.
Вопрос В чем причина этого и как это исправить?
Почему я использую EJS?Я хочу создать динамический интерфейс на основе запроса к БД.
Кажется, что в Stackoverflow есть несколько вопросов по этому поводу, я перепробовал несколько из них, и ни один не исправил мою проблему или четко не объяснил причину.
Комментарии:
1.
use
предназначено для промежуточного программного обеспечения. Вы должны использоватьget
для получения конечных точек запроса.2. Спасибо, это действительно решает проблему. Хотя я новичок в веб-разработке, я виноват в том, что допустил эту простую ошибку.
Ответ №1:
Как ответил @Quentin, проблема связана с моим использованием use
. Для запроса, который GET
в данном случае, я должен использовать get
function , и это устраняет проблему. use
применимо, когда я хочу разложить свой index.js или используйте промежуточное программное обеспечение.