Занимаясь своим собственным делом с узлом express Хана, я столкнулся с проблемой, которая подняла мое любопытство, и я нашел довольно странным. Когда я впервые использовал узел express для создания некоторых маршрутов, я использовал express Router, например,
const router = express.Router()
router.post('/my-route', myControler.myFunction)
, а затем myFunction определялся так:
const myFunction = async (req, res, next) => {
try {
await doSomeStuff(req);
res.status(200).json({
data
})
} catch (err) {
console.error(err.message);
res.status(500).send(err.toString());
}
}
В других подопечные, я просто отображал свой сервис на маршруте, не говоря уже, это asyn c или что-то в этом роде У меня создалось впечатление, что в роутере это делается автоматически.
Но недавно у меня возникла следующая проблема. У меня был код, как и выше, и так как в «doSomeStuff» я использую клиент hana (client.exe c) для выполнения asyn c операций я получил ошибка , что клиент закрыт к концу выполнения (req.status (). json ()). (Клиент Ps Hana переопределяется и сразу же закрывается.)
В качестве обходного пути я обнаружил, что пишу маршрутизатор следующим образом.
router.post('/my-route', async (req, res, next) => {
await myControler.myFunction(req, res, next)
})
или цепочку .then перед await doSomeStuff (req) вот так
await doSomeStuff(req).then(...)
, что я нахожу довольно странным, если честно.
Самым странным является то, что, изменяя первый формат на .then WORKED!
doSomeStuff(req).then(data => {res.status().json()....})
Я проверю это трижды, потому что для меня это не имеет никакого смысла, и если я что-то написал это неправда, я отредактирую сегодня вечером, потому что, используя await / asyn c или , тогда должно быть таким же.
Мой вопрос : Почему я должен написать свой маршрут так, потому что в других приложениях мне не нужно было, и он работал отлично, хотя там я не делал запрос с hana client , но с обычным топором ios