繁体   English   中英

Express req.query变为空

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM