[英]Express req.query becoming null
我有以下功能,其目的是清除Restful api的get参数:
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为空。...但是,如果您检查控制台输出,则可以看到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可以,第二次为null。 它必须与next()有关。
在定义要返回的函数的上下文中,未定义“ req,res,next”。 因此,预计要求将为空。
您不需要在clean_query
返回一个函数。 您可以按照以下方法将clean_query
定义为中间件函数,以解决此问题。
var clean_query = function(req, res, next){
console.log(req.query)
// Do stuff
next();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.