Невозможно выдать ошибку в Express Node - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть следующее сообщение маршрут

router.post("/message", async (req, res) => {
  const newMessage = new Message({
    From: req.body.sendersPhoneNumber,
    To: 9188123560,
    OTP: req.body.randomNumber,
    Message: req.body.TextToSend
  })

  newMessage.save().then((response) => {
    const from = "NEXMO"
    const to = response.To
    const text = response.Message
    nexmo.message.sendSms(from, to, text, {type: 'unicode'}, (error, responseData) => {
      if (error) {
      console.log(error)
      throw  new Error (error)
      } else {
        console.dir(responseData)
        res.send(responseData)
      }
    })
  })
})

В этом я хочу сгенерировать ошибку Если есть ошибка, для которой я сделал что-то вроде этого

 if (error) {
      console.log(error)
      throw  new Error (error)
    }

Но этокажется, не работает, могут ли некоторые помочь мне поделиться, как мы можем выдать ошибку в nodeJs

Это мой запрос от внешнего интерфейса

axios.post(test_url_base +  "/contact/message", this.state).then(response => {   

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Поставьте блок try catch, чтобы любая ошибка, сгенерированная в блоке try, попала в блок catch.

router.post("/message", async (req, res) => {
try {
    const newMessage = new Message({
        From: req.body.sendersPhoneNumber,
        To: 9188123560,
        OTP: req.body.randomNumber,
        Message: req.body.TextToSend
    })

    newMessage.save().then((response) => {
        const from = "NEXMO"
        const to = response.To
        const text = response.Message
        nexmo.message.sendSms(from, to, text, { type: 'unicode' }, (error, responseData) => {
            if (error) {
                console.log(error)
                throw new Error(error)
            } else {
                console.dir(responseData)
                res.send(responseData)
            }
        })
    });
}
catch (e) {
    res.send({ status: 400, error: e });
}
})
0 голосов
/ 12 декабря 2018

Решение 01:

Строка 1: нужен третий параметр, next, чтобы передать ошибку следующему обработчику.

Строка 16: передать ошибкук следующему обработчику ошибок: return next(error);

Примечание: в вашем корневом файле, например index.js или server.js, или что вы используете, вам нужен обработчик ошибок, например,

app.use((err, req, res, next) => {
   console.log('Found a error');
});

Ваш окончательный код будет:

router.post("/message", async (req, res, next) => {
  const newMessage = new Message({
    From: req.body.sendersPhoneNumber,
    To: 9188123560,
    OTP: req.body.randomNumber,
    Message: req.body.TextToSend
  })

  newMessage.save().then((response) => {
    const from = "NEXMO"
    const to = response.To
    const text = response.Message
    nexmo.message.sendSms(from, to, text, {type: 'unicode'}, (error, responseData) => {
      if (error) {
        console.log(error)
        return next(error);
      } else {
        console.dir(responseData)
        res.send(responseData)
      }
    })
  })
})

Решение 2:

Если вы столкнулись с ошибкой, передайте ее на стороне клиента, используйте res.status(400).send(error);

В этом случае ваш код должен быть

router.post("/message", async (req, res, next) => {
  const newMessage = new Message({
    From: req.body.sendersPhoneNumber,
    To: 9188123560,
    OTP: req.body.randomNumber,
    Message: req.body.TextToSend
  })

  newMessage.save().then((response) => {
    const from = "NEXMO"
    const to = response.To
    const text = response.Message
    nexmo.message.sendSms(from, to, text, {type: 'unicode'}, (error, responseData) => {
      if (error) {
        console.log(error)
        return res.send(error);
      } else {
        console.dir(responseData)
        res.send(responseData)
      }
    })
  })
})
0 голосов
/ 12 декабря 2018

как вы сделали, это тоже правильный путь, но я не понимаю, почему он не работает.

вы также можете попробовать это

if (error) {
   return next(error)
}

или вы также можете сделатьэто

res.render('error', { error: err })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...