我正在等待前端的类似以下内容
....?isUpdated=true
所以我在代码中做了类似的事情(因为我只处理isUpdated=true,false需要忽略)
isUpdated=true
var isUpdated = (req.query.isUpdated === 'true')
但我觉得有点奇怪。如何以正确的方式做到这一点?我的意思是从查询字符串中解析出一个布尔参数。
hc8w905p1#
如果使用查询字符串,则为文档
const queryString = require('query-string'); queryString.parse('foo=true', {parseBooleans: true}); //=> {foo: true}
wixjitnu2#
对于您的方法,我唯一要做的更改是使其不区分大小写:
var isUpdated = ((req.query.isUpdated+'').toLowerCase() === 'true')
如果您愿意,也可以将其作为一个实用程序函数:
function queryParamToBool(value) { return ((value+'').toLowerCase() === 'true') } var isUpdated = queryParamToBool(req.query.isUpdated)
ldfqzlk83#
我用这副台词:let test = (value).toString().trim().toLowerCase(); let result = !((test === 'false') || (test === '0') || (test === ''));
let test = (value).toString().trim().toLowerCase(); let result = !((test === 'false') || (test === '0') || (test === ''));
pkwftd7m4#
下面是我的通用解决方案,用于将查询参数作为布尔值:
const isTrue = Boolean((req.query.myParam || "").replace(/\s*(false|null|undefined|0)\s*/i, ""))
它将查询参数转换成一个字符串,然后通过隐藏任何虚假字符串来清除该字符串。任何得到的非空字符串将是true。
true
yhxst69z5#
var myBoolean = (req.query.myParam === undefined || req.query.myParam.toLowerCase() === 'false' ? false : true)
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; } } })
sbtkgmzw7#
从前面的答案中得到一些想法,我最终使用此函数来考虑未定义的值
const parseBool = (params) => { return !( params === "false" || params === "0" || params === "" || params === undefined ); };
92dk7w1h8#
我创建了一个名为boolean-query-express的包https://www.npmjs.com/package/booleanize-query-express它与其他包的区别在于,它将值1和0视为布尔值,并将isHere、isValid、hasSomething(camelcased)等参数视为布尔值。您可以阅读更多有关它的文档。
boolean-query-express
8条答案
按热度按时间hc8w905p1#
如果使用查询字符串,则为文档
wixjitnu2#
对于您的方法,我唯一要做的更改是使其不区分大小写:
如果您愿意,也可以将其作为一个实用程序函数:
ldfqzlk83#
我用这副台词:
let test = (value).toString().trim().toLowerCase(); let result = !((test === 'false') || (test === '0') || (test === ''));
pkwftd7m4#
下面是我的通用解决方案,用于将查询参数作为布尔值:
它将查询参数转换成一个字符串,然后通过隐藏任何虚假字符串来清除该字符串。任何得到的非空字符串将是
true
。yhxst69z5#
vkc1a9a26#
可以使用qs包
一段解析int和布尔值的代码
sbtkgmzw7#
从前面的答案中得到一些想法,我最终使用此函数来考虑未定义的值
92dk7w1h8#
我创建了一个名为
boolean-query-express
的包https://www.npmjs.com/package/booleanize-query-express
它与其他包的区别在于,它将值1和0视为布尔值,并将isHere、isValid、hasSomething(camelcased)等参数视为布尔值。
您可以阅读更多有关它的文档。