Nas*_*tro 1 javascript node.js express async-await sequelize.js
我正在使用express
和node.js
应用程序。我有一个普通路由器,它:
myID
DB
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);
}
})
Run Code Online (Sandbox Code Playgroud)
但代码运行了两次!我的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
Run Code Online (Sandbox Code Playgroud)
如果我评论这部分代码,它只会运行一次!
// 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);
// }
Run Code Online (Sandbox Code Playgroud)
这是我唯一使用的地方console.log()
!这是一个简单的示例项目,我可以在其中重现该行为。那么为什么代码运行了两次,为什么我的 params.myID 变成了 favicon.ico?
每当您打开网页时,选项卡的左上角都会有一个小图标,其中包含该页面的徽标。该图标从 加载theserver/favicon.ico
,如果返回错误,则图标保持为空,否则返回的照片将用作图标。还有其他此类保留文件,例如norobots.txt
和manifest.json
。因此,将变量 url 部分放在主级别并不是一个好主意。这个:
router.get('/:myId'
Run Code Online (Sandbox Code Playgroud)
抓住一切。相反,您应该将其移动到子路径:
router.get('/id/:myId'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2156 次 |
最近记录: |