微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

什么函数最适合检查 req.param 中的值是否为 NaN 类型并设置一些值如果是?

如何解决什么函数最适合检查 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),则计算右侧表达式!


如果您只想检查 nullundefined,并且您使用的是 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?