Express req.query变为null

时间:2014-02-28 11:21:35

标签: javascript node.js express

我有以下功能,目的是清理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()有关。

1 个答案:

答案 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();
}