我有一个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);
});
});
答案 0 :(得分:0)
您的问题是您无论如何都要将参数解析为浮点数,因此即使您发送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
响应。