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