javascript - 有没有办法在调用 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);
}
}
解决方案
推荐阅读
- python - 增加对 Python 参数变量的理解
- linux - 如何在linux中使用一个命令的输出作为另一个命令
- unity3d - 如何通过统一arcore录制视频?
- javascript - 角度 SVG 路径不可见
- postgresql - DBeaver 只能看到连接中的默认 PostgreSQL 数据库
- mysql - SQL 查询生成器 - 分组和排序 (Laravel)
- eclipse - 在 Maven 目标和 Maven 存储库中找到 Liquibase 资源
- google-bigquery - 为什么 BigQuery 有自己的存储空间?
- c# - Hangfire 事务处理(工作单元)
- css - Rails 5:带有选择类的 form_for 选择字段标签