buffer.js:246“对象1没有方法”toLowerCase'

我试图在JavaScript中使.smil(.xml)分析器。 但是当我想testing它时,node.js只是说我:

buffer.js:246 switch(encoding && encoding.toLowerCase()){ ^ TypeError: Object 1 has no method 'toLowerCase' at Function.Buffer.isEncoding (buffer.js:246:32) at assertEncoding (fs.js:98:27) at Object.fsread (fs.js:422:5) at gets (/home/pi/SMIL_Parser.js:8:8) at read_until (/home/pi/SMIL_Parser.js:28:14) at home/pi/SMIL_Parser.js:64:14 at Object.oncomplete (fs.js:93.15) 

gets()的确是我的一个function:

 var io=require('fs'); ... function gets (file){ var chaine="", cache="", pkmn=0; io.read(file, cache, 0, 1, null, function(err, byte, buf){ if (err || byte===0){return -1;} while ((cache!=="\n")) { chaine=chaine+cache; cache=""; pkmn=io.readSync(file, cache, 0, 1, null); if (pkmn===0){return -1;} } }); } 

我只是不知道什么地方出了问题,好像被读了,但是我已经确定要得到正确的参数,试图更新node.js,fs和npm。 而我在google上发现的唯一类似的错误是更新问题。

编辑:添加完整的错误消息,在这里函数read_until:

 function read_until(smil, limit){ var line=""; do { line=gets(smil); if (line===-1){return -1} }while (!(line.search(limit))); return 0; } 

 function parse (pathname){ var smil=0, line="", pkmn=0; io.open(pathname, 'r', function (err, fd){ if (err){return -1;} smil=fd; pkmn=read_until(smil, "<smil>"); ... 

fs.read 需要一个缓冲区而不是一个string。

将您的caching更改为缓冲区。

 function gets (file){ var chaine="", cache=new Buffer(), pkmn=0; io.read(file, cache, 0, 1, null, function(err, byte, buf){ if (err || byte===0){return -1;} while ((cache!=="\n")) { chaine=chaine+cache; cache=""; pkmn=io.readSync(file, cache, 0, 1, null); if (pkmn===0){return -1;} } }); } 

在这里看到fs.read代码

如果你想使用一个string作为“缓冲区”,那么你必须使用传统的接口

遗留string接口 fs.read(fd, length, position, encoding, callback)

没有看到定义encoding的代码部分,我不能准确地告诉你什么是错误的,但encoding显然不是一个string。 .toLowerCase()是String对象的一个​​方法。