无法获取节点中已解码的base64数据的值

时间:2019-02-15 15:22:00

标签: javascript node.js javascript-objects node-modules

此值已编码为base64

    {
     a: "008078888658936",
     b: "REA"
    }

并使用此代码进行了解码

    var mytokenvalue = "ewphOiAiMDA4MDc4ODg4NjU4OTM2IiwKYjogIlJFQSIKfQ=="
    let decoded = Buffer.from(token, 'base64')

同时,当我尝试获取解码值

console.log(decoded.a)

我在控制台中变得不确定。 请帮助

2 个答案:

答案 0 :(得分:1)

您可能需要使用.toString()将解码后的值作为字符串返回。

let token = "ewphOiAiMDA4MDc4ODg4NjU4OTM2IiwKYjogIlJFQSIKfQ==";
let decoded = Buffer.from(token, 'base64').toString();
console.log(decoded);

答案 1 :(得分:1)

您可以这样做:

    var token = "ewphOiAiMDA4MDc4ODg4NjU4OTM2IiwKYjogIlJFQSIKfQ==";
    eval('var decoded = ' + Buffer.from(token, 'base64').toString());
    console.log(decoded.a);

但是,如果base64编码的字符串可能来自您控制范围之外的某个地方,eval将会非常危险。任意字符串可能会扩展到某些意外的JavaScript,这将导致eval执行某些会使您的程序行为不当或破坏安全性的操作。

最好将原始对象表示为JSON字符串(使用JSON.stringify来实现),并对该字符串进行base64编码。然后,您可以使用JSON.parse重建原始对象,而不必冒使用eval的风险。像这样:

    var obj = { x: "foo", y: 123 };
    var obj_json = JSON.stringify(obj);
            // obj_json is '{"x":"foo","y":123}'
    var obj_b64 = Buffer(obj_json).toString('base64');
            // obj_b64 is 'eyJ4IjoiZm9vIiwieSI6MTIzfQ=='
    var decoded = JSON.parse(Buffer.from(obj_b64, 'base64').toString());        
    console.log(decoded.x);