我对此很陌生,也许我不知道如何问这个问题,但希望有人可以帮助我。
我在项目的 get 函数中使用了一个简短的 if 语句,但它没有返回我期望的结果。这是我的代码:
async function getPrice(stock) {
const response = await fetch(`https://stock-price-checker-proxy.freecodecamp.rocks/v1/stock/${stock}/quote`, {
method: 'GET',
credentials: 'same-origin'
});
const { symbol, latestPrice } = await response.json();
return { symbol, latestPrice };
}
module.exports = function (app) {
app.route('/api/stock-prices')
.get(async function (req, res) {
// get all parameters necessary for response
const { stock, like } = req.query;
const { symbol, latestPrice } = await getPrice(stock);
// if cant find stock
if(!symbol) {
////// console.log(like);
res.json({ stockData: {
error: "invalid symbol",
likes: like ? 1 : 0
}});
////// console.log(like);
return;
}
});
};
Like 来自复选框输入。
无论“like”是真还是假(复选框是否选中),简短的 if 语句始终返回 1。
两个console.log都显示“false”,但res.json仍然显示“likes: 1”
我已经改变了无数的事情,但还没有找到原因,我不知道它是否可能在其他地方,但其余的代码是一个样板,不是我制作的,所以它应该是正确的。
如果
console.log
显示您正在返回 "false"
(请注意引号),则 like 的值将以 String 类型返回,而不是 Boolean 类型。如果是这种情况,“true”和“false”都将解析为 true,因为它们是非空字符串。如果是这种情况,我们可以简单地稍微改变三元中的逻辑来显式检查“true”字符串值。
if(!symbol) {
res.json({ stockData: {
error: "invalid symbol",
likes: like === "true" ? 1 : 0
}});
return;
}
您可能想更改该值在早期的保存方式,以便将其解析为布尔值,特别是如果您稍后要使用该值,因为如果您逻辑上期望布尔值,但实际上这显然会导致麻烦给出一个字符串包裹的表示形式。但如果这是一次性值检查,并且您知道该值只能是“true”或“false”而不能是其他值,那么上述解决方案可能就足够了。