Является ли метод asyn c обязательным в express Router? - PullRequest
0 голосов
/ 25 февраля 2020

Занимаясь своим собственным делом с узлом 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

...