javascript - 错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头 ASYNC AWAIT 不起作用
问题描述
我正在尝试验证会话中是否有一些数据。如果不是,控制器会将您重定向到另一条路线,以获取该数据。问题是我收到错误“错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头”
我在 StackOverflow 上进行了搜索,发现每个遇到此问题的人都使用它 async/await 来修复它,但我已经在使用 async await。
您的帮助将不胜感激!非常感谢!何塞
dashboardCtrl.init = async (req, res) => {
//
var frontdata = req.session;
if (!frontdata.user) {
frontdata.user = await userfacebook.findOne({ where: { 'email': frontdata.passport.user } });
};
if (!frontdata.store) {
tmpstoredata = await userstore.findOne({ where: { 'userfacebookId': frontdata.user.id } });
if (!tmpstoredata) {
res.redirect('/toURL');
};
};
};
注意:我正在使用 EJS MATE。如果我这样做
dashboardCtrl.init = async (req, res) => {
//
res.redirect('/toURL');
};
重定向有效,问题在于使用等待。所以我不知道如何继续
解决方案
该错误表示您已经向客户发送了答案。换句话说,您正在尝试第二次声明 -> **res.*****。
再次检查流程,以防您两次对 express 的“res”声明任何操作。
下面的解决方案允许您拥有良好的结构化和可读的异步代码。
dashboardCtrl.init = (req, res) => {
// I think destructuring looks good
let { user, store } = req.session;
(async () => {
try {
if (!user) user = await userfacebook.findOne({ where: { 'email': frontdata.passport.user } });
let tmpstoredata;
if (!store) tmpstoredata = await userstore.findOne({ where: { 'userfacebookId': frontdata.user.id } });
if (!tmpstoredata) res.redirect('/toURL');
} catch (err) {
// don't forget ;)
}
})()
};
希望这可以帮到你。问候。
推荐阅读
- angular - Angular如何在滚动时固定表头
- ruby-on-rails - 无法在 localhost:8080 中运行应用程序
- javascript - Native-React + Expo:无法从“src/boot/setup.js”解析“@expo/vector-icons/fonts/Ionicons.ttf”
- c++ - 函数模板不适用于字符串文字
- python - pandas - 将更频繁的 DataFrame 下采样到不太频繁的 DataFrame 的频率
- node.js - async.waterfall() 在将回调传递给 bcrypt.hash() 时中断
- c++ - ostream 和运算符重载
- angular - 在 Angular 中调用 REST API 首先返回 null,然后再次调用并返回正确的数据
- javascript - *ngFor 不迭代数组
- c# - 从类型访问数据的更简洁的方法