gpt4 book ai didi

javascript - 为什么 async/await 函数运行两次?

转载 作者:行者123 更新时间:2023-11-30 07:50:57 24 4
gpt4 key购买 nike

我正在使用 expressnode.js 应用程序。我有一个普通路由器,它:

  • DB 中找到 myID,
  • 如果 myID 存在,它会尝试 addVisit()
  • 如果发生错误(可能这样的表不存在),它会捕获错误,创建新表并向其添加 addVisit()

路由代码如下:

    router.get('/:myId', errorHandler(async (req, res, next) => {

console.log(req.params.myId + ' This is myID Params!');

const Domain = DomainModel(db, Sequelize);
const Click = ClickModel(db, `${req.params.myId}_clicks`, Sequelize);

try {
let row = await Domain.findOne({ where: { myId: req.params.myId } });

console.log(row.myId + ' This is myID from DB');

if (row.myId) {
try {
await addVisit(Click, req);
res.sendStatus(200);
} catch (err) {
console.log(`This error fires!`);
if (err.message !== `Validation error`) {
try {
await db.sync();
await addVisit(Click, req);
res.sendStatus(200);
} catch (err) {
console.log(err);
res.sendStatus(400);
}
} else {
res.sendStatus(400);
}
}
} else {
console.log(`No such myId in use`);
res.sendStatus(400);
}
} catch (err) {
console.log(err);
}
})

但是代码运行了两次!我的 console.log() 显示:

1. ==> 1231231231 This is myID Params!
2. ==> 1231231231 This is myID from DB
3. ==> This error fires!
4. ==> favicon.ico This is myID Params!
5. ==> TypeError: Cannot read property 'myID' of null

如果我注释这部分代码,它只会运行一次!

// if (err.message !== `Validation error`) {
// try {
// await db.sync();
// await addVisit(Click, req);
// res.sendStatus(200);
// } catch (err) {
// console.log(err);
// res.sendStatus(400);
// }
// } else {
// res.sendStatus(400);
// }

这是我唯一使用 console.log() 的地方!这是一个简单的示例项目,我可以在其中重现该行为。那么,为什么代码运行了两次,为什么我的 params.myID 变成了 favicon.ico?

最佳答案

当你打开一个网页时,标签的左上角会有一个小图标,里面有网页的标志。该图标从 theserver/favicon.ico 加载,如果返回错误,则图标保持为空,否则返回的照片用作图标。还有其他此类保留文件,例如 norobots.txtmanifest.json。因此,在主级别使用可变 url 部分是一个坏主意。这个:

 router.get('/:myId'

捕捉一切。相反,您应该将其移至子路径:

 router.get('/id/:myId'

关于javascript - 为什么 async/await 函数运行两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53238192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com