簡體   English   中英

將 a.inv 添加到 req,session 后網站超時

[英]website timeout after adding a .inv to req,session

我正在嘗試向我的req.session添加一個唯一 ID,但是當 function 執行時,如果我想將 go 無限加載到另一個頁面,它會超時。 有沒有辦法正確地做到這一點?

app.use(function (req, res, next) {
    if (req.query.inv) {
        sql.query(`SELECT * FROM inv WHERE inv='${req.query.inv}';`, (error, result) => {
            if(error) console.log(error);
            if(result.length < 1) {
                req.session.inv= '';
                next()
            } else {
                req.session.inv = `?inv=${req.query.inv}`;
                console.log(req.session.inv);
                next()
            }
        });
    } else {
        if(!req.session.inv) {
            req.session.inv= '';
            next()
        }
    }
});

您有一個中間件,完成后必須調用next()以便可以調用堆棧中的下一個中間件。 請參閱 Express 的使用中間件文檔。

看看你的邏輯 - 如果inv不在你的查詢字符串中但確實存在於你的 session 中,那么next()永遠不會被調用。 這與您遇到的問題一致 - 您將inv添加到 session,然后在您的下一頁加載時,您將永遠卡在中間件中。 你會想要這樣的邏輯:

app.use(function (req, res, next) {
    if (req.query.inv) {
        /* .... */
    } else if (!req.session.inv) {
        req.session.inv= '';
    }

    next(); // this makes sure that next() always gets called
});

您還有一個明顯的SQL 注入風險,因為您正在獲取原始查詢字符串值並將其直接傳遞到您的查詢中。 你想要的是一個參數化查詢- 我鏈接到 node-postgres 文檔,即使我不確定你實際使用的是什么數據庫。 到目前為止,您的查詢不安全

暫無
暫無

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

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