我想在javascript中製作一個.smil(.xml)解析器。 但是當我想測試它時,node.js只是說我:buffer.js:246「對象1沒有方法」toLowerCase'
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)
得到()確實是我的功能之一:
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>");
...
這樣看來, 「編碼」類型不是字符串。 – ChrisCM
當然,但是有什麼辦法從讀取或其他庫函數獲取消息嗎?所以我可以知道這個var是否沒有正確初始化? – DrakaSAN
你應該能夠看到你的堆棧跟蹤,哪一行正在產生呼叫。如果我們知道'gets'函數中的哪一行導致對Function.Buffer.isEncoding的調用,我們可以提供更多幫助。或者,像這樣的一行:Object.fsread(fs.js:422:5)。除了fs.js:422:5之外,我們希望第一行與您開發的文件的名稱相匹配,它應該與包含「gets」函數的文件相匹配。 – ChrisCM