簡體   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