我正在等待前端的以下内容
....?isUpdated=true
所以我在代码中做了类似的事情(因为我只处理isUpdated=true
,false需要忽略)
var isUpdated = (req.query.isUpdated === 'true')
但对我来说似乎有些奇怪。
如何以正确的方式做到这一点?我的意思是从查询字符串中解析一个布尔参数。
答案 0 :(得分:3)
Docs 如果您使用的是查询字符串
const queryString = require('query-string');
queryString.parse('foo=true', {parseBooleans: true});
//=> {foo: true}
答案 1 :(得分:1)
我使用这两行:
let test = (value).toString().trim().toLowerCase();
let result = !((test === 'false') || (test === '0') || (test === ''));
答案 2 :(得分:0)
您可以使用qs软件包
一些用于解析int和boolean的代码
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;
}
}
})
答案 3 :(得分:0)
关于您的方法,我唯一要更改的是使其不区分大小写:
var isUpdated = ((req.query.isUpdated+'').toLowerCase() === 'true')
如果您愿意,也可以使其成为实用程序功能
function queryParamToBool(value) {
return ((value+'').toLowerCase() === 'true')
}
var isUpdated = queryParamToBool(req.query.isUpdated)
答案 4 :(得分:0)
var myBoolean = (req.query.myParam === undefined || req.query.myParam.toLowerCase() === 'false' ? false : true)
答案 5 :(得分:0)
这是将查询参数作为布尔值获取的通用解决方案:
const isTrue = Boolean((req.query.myParam || "").replace(/\s*(false|null|undefined|0)\s*/i, ""))
它将查询参数转换为字符串
然后通过抑制任何伪造的字符串进行清理。
任何产生的非空字符串将为true
。
答案 6 :(得分:0)
根据之前答案的一些想法,我最终也使用此函数来考虑未定义的值
const parseBool = (params) => {
return !(
params === "false" ||
params === "0" ||
params === "" ||
params === undefined
);
};