为什么我的node.js表示代码不能调用console.log()?

时间:2017-02-03 06:45:09

标签: javascript node.js express

当我运行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;

4 个答案:

答案 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;

您的控制台现在应该显示您的消息。