以下代码显示的不是我期望的行为。
我的期望:
GET /
- >显示“欢迎”并关闭连接
POST /pages
- >增加/记录计数器;显示“在POST功能中”,并关闭连接
GET /someRandomPath
- >增加/记录计数器;显示404消息
我观察到了什么:
GET /
- >显示“欢迎”并关闭连接
POST /pages
- > 没有计数器的增量/日志; 显示“在POST功能中”,并关闭连接
GET /someRandomPath
- >增加/记录计数器;显示404消息
代码:
var express = require('express');
var request_counter = 0;
var app = express()
.use(express.basicAuth('test', 'test'))
//serve the root (welcome)
.get('/', function(req, resp, next) {
resp.end('welcome');
})
// count/log the requests
.use(function(req, resp, next) {
console.log('request# ' + (++request_counter));
next();
})
// serve "/pages"
.post('/pages', function (req, resp, next) {
console.log('in the POST function');
resp.end('in the POST function');
})
// serve 404
.use(function (req, resp) {
resp
.status(404)
.end('BB: not found')
;
})
;
module.exports = app;
当我拨打POST /pages
时,为什么计数器不会递增/记录?
我注意到的一件事是,如果我注释掉//serve the root
部分,我会得到我期望的行为。
答案 0 :(得分:1)
如this answer中所述,您似乎应该在开始定义路线之前定义所有中间 。
您没有明确使用app.use(app.router)
,但会在you use app.get
时自动调用。
知道这一点,我很可能会将您的代码更改为类似的内容:
var express = require('express');
var request_counter = 0;
var app = express()
app.use(express.basicAuth('test', 'test'))
// count/log the requests for all except '/'
app.use(function(req, resp, next) {
if (req.path != '/') {
console.log('request# ' + (++request_counter));
}
next();
})
//serve the root (welcome)
app.get('/', function(req, resp, next) {
resp.end('welcome');
})
// serve "/pages"
app.post('/pages', function (req, resp, next) {
console.log('in the POST function');
resp.end('in the POST function');
})
// serve 404 for all the rest
app.all('*', (function (req, resp) {
resp
.status(404)
.end('BB: not found')
;
}))
app.listen(1234);