注意:我很擅长表达
var express = require('express');
var app = express();
app.get('/', function(req, res) {
res.send('id: ' + req.params.id + ' and name: ' + req.params.name);
});
var things = require('./things/things.js');
//both index.js and things.js should be in same directory
app.use('/things', things);
//Simple request time logger
app.use('/',function(req, res, next){
console.log("A new request received at " + Date.now());
//This function call is very important. It tells that more processing is
//required for the current request and is in the next middleware
//function/route handler.
next();
});
app.listen(3000);
我正在学习中间件功能,当我转到localhost:3000时,我正试图显示一个console.log消息,但我的控制台中没有显示任何内容,我在这里缺少什么?
答案 0 :(得分:10)
问题是Express按照声明的顺序将请求传递给中间件和路由处理程序。如果他们中的任何一个能够处理请求(通过发回响应),那么之后声明的任何其他匹配的中间件或路由处理程序都不会被调用。
在您的情况下发生了什么,在路由处理程序之后,您的中间件被声明为。
尝试将中间件移到前面:
app.use('/',function(req, res, next){
console.log("A new request received at " + Date.now());
next();
});
app.get('/', function(req, res) {
res.send('id: ' + req.params.id + ' and name: ' + req.params.name);
});
var things = require('./things/things.js');
app.use('/things', things);
答案 1 :(得分:1)
首先,您需要检查文件结构。如果index.js和things.js在同一目录中,那么您需要将require函数更改为var things = require('./things.js');
接下来,确认您正在查找正确的位置,console.log()
消息将显示在您加载快速服务器的终端窗口中,而不是在Web浏览器的控制台中。
答案 2 :(得分:0)
get中参数的正确“ id”和“名称”是这样的
app.get('/:id/:name', function(req, res) {
res.send('id: ' + req.params.id + ' and name: ' + req.params.name);
});
答案 3 :(得分:0)
控制台模块提供了一个简单的调试控制台,类似于 到 Web 浏览器提供的 JavaScript 控制台机制。 https://nodejs.org/api/console.html
节点服务器在我们的终端日志中生成了 console.log 消息(不在浏览器上)。