javascript - 缓冲区.js :246 "Object 1 has no method ' toLowerCase'

标签 javascript node.js raspberry-pi raspbian

我正在尝试用 javascript 制作一个 .smil (.xml) 解析器。 但是当我想测试它时,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()确实是我的函数之一:

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 takes a buffer not a string.

将缓存更改为缓冲区。

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 code here

如果您想使用字符串作为“缓冲区”,那么您必须使用旧接口(interface)

旧字符串接口(interface) fs.read(fd, length,position,encoding,callback)

关于javascript - 缓冲区.js :246 "Object 1 has no method ' toLowerCase',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17863176/

相关文章:

javascript - Node.js 中的“无法获取/”错误

javascript - 如何让 jQuery 在 Wordpress 的新选项卡中仅打开此代码的帖子链接

javascript - 检查类按钮,如果它有某个类,则创建一个 'done' div

javascript - Ember 模型结果在模板中为空,但在检查器中已填充

javascript - 不通过 Node 应用程序访问 mongodb atlas 上的旧数据

java - Jsch ssh 到 Raspberry Pi 不执行任何操作

javascript - 如何检查 selenium 服务器的当前状态(使用 Node.js 的 API?还有别的吗?)

javascript - Puppeteer:如何拦截跨多个 "pages"的请求?

node.js - 在 Raspberry Pi 上 Dockerize MongoDB v3.4?

python - 尝试创建带有锁定的简单按钮推送播放