布尔检查在NodeJS中不起作用

时间:2018-08-07 06:00:26

标签: javascript node.js typescript

我正在开发节点js API,并通过URL查询数据

get_posts_default?pageId=ge4JqBn9F0srzHnVFHmh&asking_post=false&asking_responce=false&maxSort=-1&minSort=-1&limit=20

这是负责处理此请求的功能

 public async get_poset_list(userDeta: hs_I_fb_en_user_auth_paylode,pageId:string,asking_post:boolean,asking_responce:boolean,maxSort:number,minSort:number,limit:number):Promise<hs_I_fb_en_post_return[]>{
        try {
            hs_d_w("Is asking post: - "+asking_post);
            hs_d_w("Limit: - "+limit);
            if(asking_post===true){  
                hs_d_w("Asking post true");
                if(minSort<=-1 && maxSort<=-1){
                    hs_d_w("Asking post Defolt");
                    return this._postQueryes.get_only_poses(pageId,limit);
                }else{
                    if(minSort>-1){
                        hs_d_w("Asking post MIn");
                        return this._postQueryes.get_only_poses_min(pageId,minSort,limit);
                    }
                    if(maxSort>-1){
                        hs_d_w("Asking post Max");
                        return this._postQueryes.get_only_poses_max(pageId,maxSort,limit);
                    } 
                    hs_d_w("Asking post None");
                    return [];
                }
            }else{
                if(minSort<=-1 && maxSort<=-1){
                    hs_d_w("Asking talk Defolt");
                    return this._postQueryes.get_only_talkes(pageId,limit);
                }else{
                    if(minSort>-1){
                        hs_d_w("Asking talk min");
                        return this._postQueryes.get_only_talkes_min(pageId,minSort,limit);
                    }
                    if(maxSort>-1){
                        hs_d_w("Asking talk max");
                        return this._postQueryes.get_only_talkes_max(pageId,maxSort,limit);
                    }
                    hs_d_w("Asking talk none");
                    return [];
                }
            }
        } catch (e) {
            hs_d_w("get_poset_list : " + e);
            return Promise.reject(e)
        }
    }

现在,如果我调用set asking_post = false asking_post = true ,它将始终调用此函数的其他else区域

return this._postQueryes.get_only_talkes(pageId,limit);

这个。

我不明白为什么会这样?有人可以帮我吗?

4 个答案:

答案 0 :(得分:5)

当您从req.query获取内容时,它将始终返回String。因此,请确保使用

将其转换为布尔值
const variable = (variable == 'true')
// or
const variable = (variable === 'true')

另一方面,当变量为布尔值时,不必显式检查===。这也可以

if(foo) {

} else {

}

编辑:如@Kamalakannan所说,Boolean('string')将不起作用。我很抱歉。

答案 1 :(得分:0)

查询参数被视为strings。因此,如果您使用===进行检查,那将是虚假的。

进行字符串比较,例如if ("true" === asking_post)if ("false" === asking_post)

布尔值(asking_post)将始终为字符串值返回true

const t = Boolean("true");
const f = Boolean("false");

console.log("Value of 'true':", t);
console.log("Value of 'false':", f);

所以不要使用Boolean(asking_post)

答案 2 :(得分:0)

当您从request获取任何值时,总是得到String类型。 因此,您需要先将其转换为布尔值。或者只检查String。

您可以这样做:(我个人更喜欢)

var isTrue = (asking_post == 'true');

但是请注意,请使用以下方法:

var isTrue = Boolean("false");  // return true

var isTrue = !!"false";  // return true

使用上述方法,任何不为空的字符串都将为您提供true

答案 3 :(得分:0)

您可以简单地使用JSON.parse对其进行转换。

const x = JSON.parse('true');
const y = JSON.parse('false');

它将为两者返回布尔值。