首页 > 解决方案 > 有没有办法在调用 res.redirect 或 res.writeHead 方法时防止 ma req.params 发生变化

问题描述

在使用从 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);
        }
    }

标签: javascriptnode.js

解决方案


推荐阅读