Тайм-аут сайта после добавления .inv в req, сеанс - PullRequest
1 голос
/ 29 апреля 2020

Я пытаюсь добавить уникальный идентификатор к своему req.session, но когда функция выполняется, если я хочу 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()
        }
    }
});

1 Ответ

0 голосов
/ 29 апреля 2020

У вас есть промежуточное ПО, которое должно завершить вызов next(), чтобы можно было вызвать следующее промежуточное ПО в стеке. См. Express Использование документации промежуточного программного обеспечения .

Посмотрите на логи c - если inv отсутствует в строке запроса, но существует в сеансе, то next() никогда не называется. Это согласуется с вашей проблемой - вы добавляете inv к вашему сеансу, а затем при следующей загрузке страницы вы навсегда застряли в вашем промежуточном программном обеспечении. Вместо этого вы хотели бы получить logi c следующим образом:

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 Injection риск, потому что вы берете необработанное значение строки запроса и передаете его непосредственно в Ваш запрос. Вам нужен параметризованный запрос - я связался с документацией по узлу - postgres, хотя я не уверен, какую базу данных вы на самом деле используете. На данный момент ваш запрос не безопасен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...