Почему «запрошенная домашняя страница» никогда не выводится на консоль терминала, когда я запускаю server.js и server.js на localhost:8000 ? index.html хорошо index.html

server.js

 var express = require("express"); var path = require('path'); var index = require('./routes/index'); var app = express(); var port = 8000; app.set("views", path.join(__dirname, 'views')); app.set("view engine", "ejs"); app.engine("html", require("ejs").renderFile); app.use(express.static(path.join(__dirname, 'client'))); app.use('/', index); app.listen(port, function() { console.log("server started on port", port); }); 

index.js

 var express = require('express'); var router = express.Router(); router.get('/', function(req, res, next) { console.log('homepage requested'); // never executes res.render('index.html'); // always executes }); module.exports = router; 

console.log('homepage requested') напечатает сообщение в terminal , а не в browser . Если вы запустите свой сервер с node index командной строки, а затем откроете свою страницу, в терминале вы увидите сообщение.

Это связано с тем, как вы используете app.use(express.static(path.join(__dirname, 'client')));

Если вы вытащите его, вы сможете увидеть console.log

Похоже, что если в app.use нет mount path app.use и он видит маршрут с помощью «/» (домашний маршрут), он просто подает статический файл из express.static . Это не продолжается ни с какими консолями.

Возможный обходной путь для получения console.log заключается в проверке URL-адреса в app.use , который распечатывает только домашнюю страницу.

 app.use("/", (req, res, next) ={amp}gt; { if (req.url == "/") { console.log("just hompage") } return next() }, express.static(path.join(__dirname, "client/build"))) 

Я думаю, что express.static из причин, почему это происходит, заключается в том, что express.static завершает ответ. и после этого вы ничего не сможете утешить. Я думаю, вам даже не нужен app.get("/") или router.get("/") потому что по умолчанию, если нет пути монтирования, он работает по маршруту «/». Таким образом, он отправляет файл автоматически.

Я думаю, что express.static запускается при каждом попадании маршрута, чтобы проверить наличие статических файлов.

У вас есть индексный файл с тем же именем, что и у маршрута.

Где вы добавляете маршрут, app.use (‘/’, index);

Это не будет вызвано, если файл index.html существует и уже обслужен (так как файл имеет то же имя, что и маршрут).

Измените имя index.html на index2.html. Тогда сделай это

 var express = require('express'); var router = express.Router(); router.get('/', function(req, res, next) { console.log('homepage requested'); // never executes res.render('index2.html'); // always executes }); module.exports = router; 

Ваша консоль должна теперь показать ваше сообщение.

Express не будет выводить console.log на терминал, если вы не установили переменную среды DEBUG в значение express: * https://expressjs.com/en/guide/debugging.html