鍍金池/ 問(wèn)答/HTML/ createReadStream讀取注釋報(bào)錯(cuò)

createReadStream讀取注釋報(bào)錯(cuò)

利用fs模塊的createReadStream
router.post('/', function(req, res, next) {
    var readStream = fs.createReadStream('./public/javascripts/Json.json');
    var data = '';
    readStream.on('data',(chunk)=>{
        data = data+chunk;
    })
    readStream.on('end',()=>{
        var tmp = JSON.parse(data);
        res.send(tmp);
    })
});
讀取一個(gè)包含有注釋的Json.json文件,形如
/*{
    "head":{
        "resolution":"600x100"
    },
    "data":{
        "info":"wangergou"
    }
}*/
在gitBash中報(bào)錯(cuò),如下圖所示

圖片描述


查閱createReadStream的文檔有autoClose:false;如獲至寶,使用之,未果。

怎么能將注釋一并讀取發(fā)送到前端?或者繞過(guò)注釋直接讀取未注釋的代碼段?


在已采納的大神答疑解惑下,定位問(wèn)題為json.parse(),遇到/*注釋產(chǎn)生錯(cuò)誤,這個(gè)現(xiàn)象和json本身不允許注釋是一致的。
我要做的就是破壞json的規(guī)則,因此我將字節(jié)流讀取結(jié)束后的“字符串”暫不轉(zhuǎn)為json,利用正則對(duì)其進(jìn)行處理

    readStream.on('end',()=>{ 
        console.log(typeof data,data.constructor);              //1
        var tmp = data.replace(/\/\*(\s|.)*?\*\//g,"");
        console.log(tmp);                                       //2  
    })

此時(shí)第一處console.log打印string function String() { [native code] }

回答
編輯回答
孤毒
怎么能將注釋一并讀取發(fā)送到前端?或者繞過(guò)注釋直接讀取未注釋的代碼段?

json是不可能json的,一輩子都不可能json。最好的方式當(dāng)然是把注釋去掉咯。或者

  1. 正則把/*...*/去掉。
  2. 把注釋改成一個(gè)描述字段或者擴(kuò)展字段。
  3. JSON.parse去掉,不請(qǐng)求json資源請(qǐng)求js資源。
2017年12月18日 06:28
編輯回答
瘋子范

JSON文件不能加注釋吧

2017年12月1日 00:24