有没有一种方法可以防止在调用res.redirect或res.writeHead方法时更改ma req.params

时间:2019-08-15 19:46:23

标签: javascript node.js

我使用req.params.url中接收的参数进行检查后,尝试将用户重定向到特定URL。

但是,我有一个异步方法来检查Redis存储中是否存在某些url,并且我的res.redirect在检查完成之前就已执行,因此我的req.params.url已更改并且发送了错误的数据进行检查

我试图创建一个不可变的对象,但是没有用。

我的检查方法应保持异步

async function keyExists(key) {
  let client = redis.createClient();
  client.on('error', (err) => {
    console.log('Error ' + err);
  });
  const res = await client.get(key.toString());
  return res;
}

async get(req, res) {
        try {
            let url = req.params.url;
            let urlCheck = req.params.url;
            console.log(req);
            if (url === '' || isNullOrUndefined(url)) {
                throw new Error('There was something wrong w with reading the data');
            }
            const exists = await redisService.keyExists(urlCheck);
            if (exists) {
                // res.status(302).send('Redirecting');
                console.log('Redirect');
                res.status(302).redirect(exists);
                res.end();
            } else {
                res.status(404).send('URL does not exists');
            }
        } catch (error) {
            res.status(400).send(error.message);
        }
    }

0 个答案:

没有答案