Не могу остановить функцию nodejs

У меня есть серверный серверный узел nodejs, который принимает целое число, а затем выполняет некоторый код. Моя проблема в том, что, если я отправляю строку, я все равно получаю ответ с кодом 200 с нулевыми данными.

Чтобы остановить функцию и отправить сообщение об ошибке, я пытаюсь проверить, является ли запрос if а также else заявления, но это не работает. Итак, можно ли сделать это так или есть лучший способ остановить выполнение и отправить ошибку?

app.post('/xrp', (req, res) => {
  axios.get('https://www.surbtc.com/api/v2/markets/btc-clp/ticker')
    .then(response => {
      var clpbtc = parseFloat(response.data.ticker.min_ask[0]);
      if (typeof clpbtc === 'number') {
        coinTicker('bittrex', 'XRP_BTC')
        .then(response => {
          var xrpbtc = response.rawData.Bid;
          var exchangeRate = clpbtc * xrpbtc;
          if (xrpbtc) {
            var cantidadCLP = req.body.numero;
            var cantidadXRP = parseFloat(req.body.numero) / exchangeRate;
            var fee = 0.025;
            var oppositeFee = 0.975
            var totalCompraXRP = cantidadXRP * oppositeFee;
            res.status(200).json({ "cantidadCLP" : cantidadCLP, "cantidadXRP" : cantidadXRP, "fee": fee, "oppositeFee": oppositeFee, "totalCompraXRP": totalCompraXRP})
          } else {
            res.sendStatus(500).send("No válido2")
          }
        })
        .catch(error => {
            res.sendStatus(500).json(error);
        })
      } else {
        res.sendStatus(500).send("No válido")
      }
    })
    .catch(error => {
        res.sendStatus(500).json(error);
    });
  });

1 ответ

Ваша проблема в том, что вы все равно анализируете параметр как число с плавающей точкой, так что даже если вы отправляете string, он будет преобразован в number и ваш запрос просто не вернет никаких данных, следовательно, нулевой ответ.

parseFloat('This is a string')
// => NaN

typeof parseFloat('This is a string')
// => 'number'

Это странное свойство JavaScript, где typeof NaN == 'number'

Для этого измените свой код на следующий:

.then(response => {
      var clpbtc = parseFloat(response.data.ticker.min_ask[0]);
      if (!isNaN(clpbtc)) {
        coinTicker('bittrex', 'XRP_BTC')

Теперь, если вы передадите строку, вы должны получить 500 ответ.

Другие вопросы по тегам