2014-09-30 10 views
0

我正在根据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语句都在寻找encodeb64decodeb64,它会完美运行。它也可以工作,如果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语句的问题,通过移动和反转代码的顺序。

正如你可以在我的代码注释中看到的,我尝试了两种不同的解码方法,但没有成功。

回答

1

它崩溃的原因我相信当function = decode64时,变量myEncode未被声明和初始化,因为if(myFunction ==“encode64”)块未运行。 因此,当代码尝试新的缓冲区(myEncode ...)时,它会失败,因为myEncode未定义。 我想你的意思是代码:

var myDecode = new Buffer(myString, ...) 

代替

+0

啊哈!谢谢你解释这个!它现在按预期工作! – Erlpil 2014-09-30 09:32:43

相关问题