admin管理员组

文章数量:1325236

I am developing the node js API and I a querying data by the URL

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

This is the function who is responsible for handling this request

 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)
        }
    }

Now if I call set asking_post=false or asking_post=true it allways call the main else area of this function

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

This one.

I don't understand why it's happening? Can anyone please help me on this?

I am developing the node js API and I a querying data by the URL

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

This is the function who is responsible for handling this request

 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)
        }
    }

Now if I call set asking_post=false or asking_post=true it allways call the main else area of this function

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

This one.

I don't understand why it's happening? Can anyone please help me on this?

Share Improve this question edited Aug 7, 2018 at 6:14 Hardik Shah 4,2202 gold badges22 silver badges45 bronze badges asked Aug 7, 2018 at 6:00 Sourabh DevpuraSourabh Devpura 791 gold badge2 silver badges11 bronze badges 1
  • 2 if((!!asking_post) === true) – NoobTW Commented Aug 7, 2018 at 6:03
Add a ment  | 

4 Answers 4

Reset to default 6

When you get something from the req.query it will always return a String. So, make sure to convert it to boolean using

const variable = (variable == 'true')
// or
const variable = (variable === 'true')

On a side note, when a variable is boolean you don't have to check explicitly with ===. This will also work

if(foo) {

} else {

}

EDIT: as @Kamalakannan said Boolean('string') will not work. My apologies.

Query params are considered as strings. So if you check with ===, it will be falsy.

Do string parison, like if ("true" === asking_post) or if ("false" === asking_post)

Boolean(asking_post) will always return true for string values

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

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

So don't use Boolean(asking_post).

You can simply convert it with JSON.parse.

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

It will return boolean values for both.

When you get any values from request you always get String type. So you need to convert it into Boolean first. Or just check with String.

You can do this: (I personally preferred)

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

But please be caution to use following method:

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

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

Any string which is not empty will give you true by using the above methods.

本文标签: javascriptboolean check is not working in NodeJSStack Overflow