我有以下功能,目的是清理Restful api的参数:
var clean_query = function(){
return function(req, res, next){
console.log(req.query)
// Do stuff
next();
}
}
真正奇怪的是当我尝试这个功能时,这是我在控制台中看到的:
✔ Express server listening on port 3000 in development mode
✔ MongoDB connection done.
✔ Server launched
{ param1: 'toto', param2: 'titi' }
/Users/... console.log(req.query)
^
TypeError: Cannot read property 'query' of null
错误消息非常清楚:它告诉我req为null ....但是如果你检查控制台输出,你可以看到console.log(req.query)正在将内容输出到控制台,所以它不是现实中空虚。
你知道我的错误是什么吗?
编辑:我的路线处理:
app.get(uri, clean_query(), get_list_func(schema));
编辑2:我的中间件:
app.use(express.logger('dev'));
app.use(express.methodOverride());
app.use(express.bodyParser());
app.use(express.urlencoded());
app.use(express.json());
app.use(expressValidator());
app.use(express.cookieParser('secret'));
app.use(express.session( {
store : MongoStore( { db : 'dbtest' } ),
key : 'sessionid',
cookie : { httpOnly : false },
secret : 'secret'
}, function() {
app.use(app.router);
}));
app.use(passport.initialize());
app.use(passport.session());
编辑3:奇怪,如果我从函数参数中删除下一个,没有更多错误,但我不能使用这样的功能,因为我需要将其与其他控制器链接。
编辑4:哇,似乎这个函数被调用了两次....第一次调用req是ok,第二次调用null。它必须与next()有关。答案 0 :(得分:-2)
在定义将返回的函数的上下文中,没有定义“req,res,next”。因此,预期req将为null。
您无需在clean_query
中返回任何功能。您可以将clean_query
定义为中间件函数,如下所示,以解决此问题。
var clean_query = function(req, res, next){
console.log(req.query)
// Do stuff
next();
}