当我运行server.js并转到localhost:8000时,为什么“主页请求”永远不会输出到终端控制台? 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;
答案 0 :(得分:2)
console.log('homepage requested')
会在terminal
中打印消息,而不是browser
。如果您使用命令行node index
运行服务器,然后打开您的页面,您将在终端中看到该消息。
答案 1 :(得分:1)
这与您使用app.use(express.static(path.join(__dirname, 'client')));
如果将其取出,应该可以看到console.log
看来,如果mount path
中没有app.use
,并且看到带有“ /”(本地路由)的路由,它只是从express.static
提供静态文件。它不会在任何控制台上继续。
获取console.log的一种可能的解决方法是在app.use
中进行URL检查,这只会打印出主页。
app.use("/", (req, res, next) => {
if (req.url == "/") {
console.log("just hompage")
}
return next()
}, express.static(path.join(__dirname, "client/build")))
我认为发生这种情况的部分原因是 express.static
结束了响应。,之后您将无法再进行任何操作。我认为您甚至不需要app.get("/")
或router.get("/")
,因为默认情况下,如果没有安装路径,它就可以在“ /”路由上运行。因此它会自动发送文件。
我认为express.static
会在每次点击的路线上运行以检查静态文件。
答案 2 :(得分:-1)
表示不会将console.log输出到终端,除非您将DEBUG环境变量设置为表达:* https://expressjs.com/en/guide/debugging.html
答案 3 :(得分:-1)
您有一个与路径同名的索引文件。
在添加路线的位置, 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;
您的控制台现在应该显示您的消息。