get() в node.js приложение не вызывается, когда я пытаюсь нажать localhost

#node.js #express

#node.js #экспресс

Вопрос:

Я новичок в node.js . У меня есть программа, которая называется ниже app.js работает на моем ноутбуке

 var express = require('express');
var engine = require('consolidate');

var app = express();

app.set('views', __dirname);
app.engine('html', engine.mustache);
app.set('view engine', 'html');

app.use(express.static('.'));

app.get('/', function(req, res) {
    console.log("Got request for index.html");
    res.render('index.html');
});

app.listen(5000, '0.0.0.0');
  

и у меня есть index.html по тому же пути , что и app.js . Когда я попытался нажать localhost: 5000 из браузера или из postman, я получаю index.html в качестве ответа. Я думал, что app.get() будет вызван, и в журнале «Получен запрос на index.html » будет отображен. Но эта функция не вызывается. Я понял, что .get() вызывается для маршрутизации.

Я не уверен, как браузер / почтальон получает index.html в качестве ответа, если get() в app.js это не значит получить удар. Может ли кто-нибудь, пожалуйста, помочь мне понять, как postman получает ответ, даже если app.get() не вызывается.

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

1. Вы пробовали без настройки хоста? 0.0.0.0 это не то же самое, что localhost ; 127.0.0.1 is localhost (в общем случае). Но host параметр не должен быть необходим для локального тестирования.

2. @DaveNewton: я пробовал без настройки хоста, также как app.listen(5000).

3. Я использовал его. Все еще не распечатывается журнал.

4. Журнал всегда будет печататься на стороне сервера, так как это код на стороне сервера. Вы ничего не увидите в браузере…

5. Я не проверяю браузер. Я проверяю консоль на терминале, где я запускаю сервер.

Ответ №1:

Промежуточные программы Express применяются по порядку. express.static не вызывает следующее промежуточное программное обеспечение в цепочке, если оно совпадает с файлом — оно просто обслуживает файл и завершает ответ. Итак, потому что index.html находится в вашем каталоге статических файлов, это означает, что промежуточное программное обеспечение app.get никогда не вызывается.

Обычно вы создаете общую папку для своих статических ресурсов и папку views для ваших HTML-представлений.

что-то вроде:

 const {join} = require('path');
app.set('views', join(__dirname, '/views'));
app.engine('html', engine.mustache);
app.set('view engine', 'mustache');
app.use(express.static(join(__dirname,'/public')));
  

и убедитесь, что ваш index.html находится в папке views, а ваши статические ресурсы находятся в общей папке

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

1. Спасибо, Майкл. Все наше намерение состоит в том, чтобы обслуживать index.html в качестве ответа. Других запросов к этому серверу не будет. Могу ли я удалить все и просто оставить app.get(), чтобы app.get вызывался каждый раз.

2. Если у вас нет каких-либо статических ресурсов, таких как изображения или скрипты, вы могли бы это сделать. Просто удалите статическое промежуточное ПО express.

3. Когда мобильное приложение попадает на наш сервер, оно отправляет некоторые зашифрованные данные в качестве одного из заголовков для API. Нам нужно как-то получить доступ к этому заголовку внутри index.html .

4. Комментирование app.use(express.static(‘.’)) выдает ошибку, когда я пытаюсь получить доступ к localhost: 5000

5. Извините. Я решил ошибку и четко ее понял. Большое спасибо, Майкл.