如何解决什么函数最适合检查 req.param 中的值是否为 NaN 类型并设置一些值如果是?
关于页面:
我有一个反应应用程序,它将 url 参数发送到后端服务器。现在前端的 url 看起来像:maxprice=100000&minsqm=50&maxsqm=100&page=1
,这些是 DB 的用户过滤器。现在在后端我创建了 const
来捕获值并且工作正常。
现在如果我想从数据库中过滤这些,我需要将它们发送到 sequelize 和过滤数据。现在一切正常,直到未发送某些参数 - 如果 url 如下所示:maxprice=100000&minsqm=&maxsqm=&page=1
请注意,minsqm
maxsqm
值是 NaN
(这是我在 console.log
时得到的)
现在我创建了多个 if
语句来检查是否有数据。像这样
if (!maxPrice) {
const maxPrice = 9999999;
//then do the logic with DB...
所以我正在检查 maxPrice
,如果没有,我正在设置一些可接受的值。问题是我需要做多个“if”语句来分别检查每个 req.query
,然后执行数据库逻辑。
有没有更简单的方法来实现这一点?理想情况下,我希望有某种函数来执行此逻辑:检查 req.query
常量。如果它们是 NaN
(不在 req.query 中)设置一些默认值,如果不保留该值。
有什么想法吗?谢谢!
controller.js
const page = parseInt(req.query.page);
const maxPrice = parseInt(req.query.maxprice);
const minSqm = parseInt(req.query.minsqm);
const maxSqm = parseInt(req.query.maxsqm);
function checkQueryParams () {
//here i would like to check maxprice,minsqm,maxsqm
}
if (!maxPrice) {
const maxPrice = 9999999;
//DB logic...
} else {
//DB logic..
}
解决方法
您可以在作业中使用 Short-circuit evaluation:
const page = parseInt(req.query.page) || 123;
const maxPrice = parseInt(req.query.maxprice) || 9999999;
const minSqm = parseInt(req.query.minsqm) || 1;
const maxSqm = parseInt(req.query.maxsqm) || 9;
注意:如果值为零(即 falsy),则计算右侧表达式!
如果您只想检查 null
和 undefined
,并且您使用的是 NodeJS 14.0 及更高版本,则可以直接在作业中使用 Nullish coalescing:
const page = parseInt(req.query.page) ?? 123;
const maxPrice = parseInt(req.query.maxprice) ?? 9999999;
const minSqm = parseInt(req.query.minsqm) ?? 1;
const maxSqm = parseInt(req.query.maxsqm) ?? 9;
这不适用于 NaN
tho。
以下方法可能正是您正在寻找的方法。
function parseIntOrDefault(str,defaultValue) {
const result = parseInt(str);
return isNaN(result) ? defaultValue : result;
}
const page = parseIntOrDefault(req.query.page,1);
const maxPrice = parseIntOrDefault(req.query.maxprice,99999);
const minSqm = parseIntOrDefault(req.query.minsqm,1);
const maxSqm = parseIntOrDefault(req.query.maxsqm,9);
这可能不是最佳做法,但我认为它会解决您的问题
所以你想避免“null”并确保它是一个数字 有一种快速而肮脏的方法可以做你想做的事
你可以使用 ||变量上的操作符给它们一个默认值:
const test = null || 9999;
console.log(test);
javascript 中还有另一个有趣的事情,它可以通过在字符串前添加一个 + 号来轻松地将字符串转换为数字。如果它不是一个有效的数字,它仍然是一个数字类型的变量,但内容是 NaN
const test = +"999";
console.log(typeof test);
const test2 = +"string";
console.log(test2);
console.log(typeof test2);
所以如果我们现在结合起来, ||运算符会给你 0 而不是 NaN
const a = +"b" || 0;
const b = 99999 || 0;
const c = +"99999" || 0;
console.log(a);
console.log(b);
console.log(c);
所以我的答案是
const page = +req.query.page || 0;
const maxPrice = +req.query.maxprice || 0;
const minSqm = +req.query.minsqm || 0;
const maxSqm = +req.query.maxsqm || 0;
但同样,这不是一个好习惯
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。