Не удается отобразить страницу EJS в node.js веб-приложение

#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>
 

Проблема

  1. Когда я перехожу к корневому URL ( localhost:port/ ), отображается index.ejs.
  2. В index.ejs я нажимаю на ссылку About , URL-адрес изменяется на ( localhost:port/about ), но about.ejs не отображается. Однако проверка источников F12 в браузере (Microsoft Edge Chrominum) about.ejs находится там.
  3. Когда я перехожу по ссылке напрямую, вводя URL в строку url, index.js отображается. Поведение (в F12 / sources) такое же, как и в шаге 2.
  4. Когда я комментирую ( app.use("/") блокирую index.js ), about.ejs доступен и отображается на экране.
  5. Обратите внимание, что навигация работает отлично, если они представляют собой HTML-страницы и обслуживаются node.js сервер. Все было протестировано только на локальном сервере.

Вопрос В чем причина этого и как это исправить?

Почему я использую EJS?Я хочу создать динамический интерфейс на основе запроса к БД.


Кажется, что в Stackoverflow есть несколько вопросов по этому поводу, я перепробовал несколько из них, и ни один не исправил мою проблему или четко не объяснил причину.

Комментарии:

1. use предназначено для промежуточного программного обеспечения. Вы должны использовать get для получения конечных точек запроса.

2. Спасибо, это действительно решает проблему. Хотя я новичок в веб-разработке, я виноват в том, что допустил эту простую ошибку.

Ответ №1:

Как ответил @Quentin, проблема связана с моим использованием use . Для запроса, который GET в данном случае, я должен использовать get function , и это устраняет проблему. use применимо, когда я хочу разложить свой index.js или используйте промежуточное программное обеспечение.