Я работаю с приложениями 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);
}
})
Но код запускается дважды!Мой 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?