解析node/express中布尔查询字符串参数的正确方法

bvjxkvbb  于 2022-11-04  发布在  Node.js
关注(0)|答案(8)|浏览(295)

我正在等待前端的类似以下内容

....?isUpdated=true

所以我在代码中做了类似的事情(因为我只处理isUpdated=true,false需要忽略)

var isUpdated = (req.query.isUpdated === 'true')

但我觉得有点奇怪。
如何以正确的方式做到这一点?我的意思是从查询字符串中解析出一个布尔参数。

hc8w905p

hc8w905p1#

如果使用查询字符串,则为文档

const queryString = require('query-string');

queryString.parse('foo=true', {parseBooleans: true});
//=> {foo: true}
wixjitnu

wixjitnu2#

对于您的方法,我唯一要做的更改是使其不区分大小写:

var isUpdated = ((req.query.isUpdated+'').toLowerCase() === 'true')

如果您愿意,也可以将其作为一个实用程序函数:

function queryParamToBool(value) {
  return ((value+'').toLowerCase() === 'true')
}
var isUpdated = queryParamToBool(req.query.isUpdated)
ldfqzlk8

ldfqzlk83#

我用这副台词:
let test = (value).toString().trim().toLowerCase(); let result = !((test === 'false') || (test === '0') || (test === ''));

pkwftd7m

pkwftd7m4#

下面是我的通用解决方案,用于将查询参数作为布尔值:

const isTrue = Boolean((req.query.myParam || "").replace(/\s*(false|null|undefined|0)\s*/i, ""))

它将查询参数转换成一个字符串,然后通过隐藏任何虚假字符串来清除该字符串。任何得到的非空字符串将是true

yhxst69z

yhxst69z5#

var myBoolean = (req.query.myParam === undefined || req.query.myParam.toLowerCase() === 'false' ? false : true)
vkc1a9a2

vkc1a9a26#

可以使用qs
一段解析int和布尔值的代码

qs.parse(request.querystring, {
      decoder(str, decoder, charset) {
            const strWithoutPlus = str.replace(/\+/g, ' ');
            if (charset === 'iso-8859-1') {
              // unescape never throws, no try...catch needed:
              return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);
            }

            if (/^(\d+|\d*\.\d+)$/.test(str)) {
              return parseFloat(str)
            }

            const keywords = {
              true: true,
              false: false,
              null: null,
              undefined,
            }
            if (str in keywords) {
              return keywords[str]
            }

            // utf-8
            try {
              return decodeURIComponent(strWithoutPlus);
            } catch (e) {
              return strWithoutPlus;
            }
          }
})
sbtkgmzw

sbtkgmzw7#

从前面的答案中得到一些想法,我最终使用此函数来考虑未定义的值

const parseBool = (params) => {
 return !(
   params === "false" ||
   params === "0" ||
   params === "" ||
   params === undefined
 );
};
92dk7w1h

92dk7w1h8#

我创建了一个名为boolean-query-express的包
https://www.npmjs.com/package/booleanize-query-express
它与其他包的区别在于,它将值1和0视为布尔值,并将isHere、isValid、hasSomething(camelcased)等参数视为布尔值。
您可以阅读更多有关它的文档。

相关问题