-1

我有一个 nodejs 无服务器后端,它需要一个整数,然后执行一些代码。我的问题是,如果我发送一个字符串,我仍然会收到一个带有空数据的 200 代码响应。

为了停止该函数并发送一条错误消息,我试图检查请求是否是带有ifandelse语句的整数,但它不起作用。那么,是否可以这样做,还是有更好的方法来停止执行并发送错误?

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);
    });
  });
4

1 回答 1

0

您的问题是您将参数解析为浮点数,因此即使您发送 a string,它也会转换为 anumber并且您的查询将简单地不返回任何数据,因此返回 null 响应。

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响应。

于 2017-11-23T18:35:27.837 回答