我正在根据URL运行不同的编码语句。使用缓冲区解码base64时出错。第一个参数需要是一个数字
我的代码:
var parsedUrl = url.parse(req.url, true);
var queryAsObject = parsedUrl.query;
var myString = queryAsObject["string"];
var myFunction = queryAsObject["function"];
if (myFunction == "encodeb64") {
var bufEncode = new Buffer(JSON.stringify(myString));
var myEncode = bufEncode.toString('base64');
console.log(myEncode);
}
else {
console.log("Error1");
};
if (myFunction == "decodeb64") {
// var bufDecode = new Buffer(myEncode, 'base64');
// var myDecode = bufDecode.toString('utf8');
var myDecode = new Buffer(myEncode, 'base64').toString('utf8');
console.log(myDecode);
}
else {
console.log("Error2");
};
URL中使用:http://127.0.0.1:8020/?string=text&function=decodeb64
的问题是,我有是最后的if语句。如果其正在寻找decodeb64
,并且第一条语句正在寻找encodeb64
,那么当function=decodeb64
位于URL中时,它会崩溃。如果两个if语句都在寻找encodeb64
或decodeb64
,它会完美运行。它也可以工作,如果function=encodeb64
在URL中。
该错误消息我得到的是:
buffer.js:188
throw new TypeError('First argument needs to be a number, ' +
^
它指出:
var myDecode = new Buffer(myEncode, 'base64').toString('utf8');
上的错误给定的数字指出,在新的n个。
我已经找到了解决if语句的问题,通过移动和反转代码的顺序。
正如你可以在我的代码注释中看到的,我尝试了两种不同的解码方法,但没有成功。
啊哈!谢谢你解释这个!它现在按预期工作! – Erlpil 2014-09-30 09:32:43