簡體   English   中英

在req.session.destroy()ExpressJS之前保存

[英]Save before req.session.destroy() ExpressJS

我想在注銷路由中刪除會話之前將會話值“圖像位置”保存到數據庫中

我采用的解決方案是:

app.get('/logout',function(req,res){

    Person.update({ username: req.session.user_name }, { $set: {lastimage: req.session.userimage[req.session.img_idx]}}, function(error,update)
            {
                if(update){ 
                req.session.destroy(function() {
                     res.end();
                });
                if(error){
                    console.log(error);
                    res.end();
                }

                }       

            });
});

但是,當我使用此獲取位置路由時,任務已完成,即person db中的值已更新,但作為回報,顯示了一些奇怪的錯誤

TypeError: Cannot read property 'undefined' of undefined
    at options.key (/opt/expressjs/app.js:381:94)
    at callbacks (/opt/expressjs/node_modules/express/lib/router/index.js:164:37)
    at param (/opt/expressjs/node_modules/express/lib/router/index.js:138:11)
    at pass (/opt/expressjs/node_modules/express/lib/router/index.js:145:5)
    at Router._dispatch (/opt/expressjs/node_modules/express/lib/router/index.js:173:5)
    at Object.router (/opt/expressjs/node_modules/express/lib/router/index.js:33:10)
    at next (/opt/expressjs/node_modules/express/node_modules/connect/lib/proto.js:193:15)
    at resume (/opt/expressjs/node_modules/express/node_modules/connect/lib/middleware/static.js:65:7)
    at SendStream.error (/opt/expressjs/node_modules/express/node_modules/connect/lib/middleware/static.js:80:37)
    at SendStream.EventEmitter.emit (events.js:95:17)

為什么會這樣呢。 我正在使用ExpressJs會話和mongodb

PS:/opt/expressjs/app.js:381:94行為

Person.update({ username: req.session.user_name }, { $set: {lastimage: req.session.userimage[req.session.img_idx]}}, function(error,update)

您是否嘗試過保存

使用前在某些變量中使用“ req.session.userimage [req.session.img_idx]”?

例如:

var uName = req.session.user_name,
    uImage = req.session.userimage[req.session.img_idx];

Person.update({ username: uName }, { $set: {lastimage: uImage }}, function(error,update) { ...

順便說一句,您可能兩次調用res.end(),這會使事情變得很奇怪。

編輯:

app.get('/logout', function(req,res) {

    var uName  = req.session.user_name,
        uImage = req.session.userimage[req.session.img_idx];

    Person.update({ username: uName }, { $set: {lastimage: uImage }}, function(error,update) {

        if(error)
            console.log(error);

        // This actually destroys the session
        delete req.session;
        res.end();
    });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM