Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json fs.writeSync输出字符串作为int数组_Json_Node.js_Filesystems - Fatal编程技术网

Json fs.writeSync输出字符串作为int数组

Json fs.writeSync输出字符串作为int数组,json,node.js,filesystems,Json,Node.js,Filesystems,我使用express router捕获ajax post数据,这是一个字符串化的JSON obj: router.all('/ajax/setup/save/asset', function (req, res) { console.log('POST: /ajax/setup/save/asset'); var fileName = path.join(jsonFileNamePrefix, jsonFileName_asset); req.on('da

我使用express router捕获ajax post数据,这是一个字符串化的JSON obj:

router.all('/ajax/setup/save/asset', function (req, res) {   
    console.log('POST: /ajax/setup/save/asset');

    var fileName = path.join(jsonFileNamePrefix, jsonFileName_asset);   

    req.on('data', function(chunk) {
        console.log('POST: DATA: ' + chunk);
        fd = fs.openSync(fileName, 'w');        
        console.log('Opened file: ' + fileName);                                                
        fs.writeSync(fd, chunk);            
        console.log('Wrote ' + chunk + ' into file ' + fileName);
        fs.closeSync(fd);
        console.log('Closed file: ' + fileName);
        res.end();
        console.log('res.end()');
    });         
});
然后控制台记录:

POST: /ajax/setup/save/asset
POST: DATA: {"asset":"test"}
Opened file: /srv/data/asset.json
Wrote {"asset":"test"} into file /srv/data/asset.json
Closed file: /srv/data/asset.json
res.end()
但是,该文件实际上被编写为:

[123,34,97,115,115,101,116,34,58,34,116,101,115,116,34,125]
尝试告诉fs.writeSync使用“utf8”、“hex”编码,仍然得到相同的结果。 还尝试了JSON.parse,然后尝试了JSON.stringify传入数据块,也没有帮助。

代码中的req对象实际上是http.IncomingMessage流的一个实例

当它通过数据事件提供信息时,该信息作为缓冲区提供

此外,在对处理程序的第一次调用中,并不能保证请求的所有数据都可用

有几种方法可以将这些数据捕获到可用字符串中。您可以创建一个新字符串,然后简单地将块连接在一起

router.all('/ajax/setup/save/asset', function (req, res) {   
    var buf = ''

    req.on('data', function(chunk){
        buf += chunk.toString();
    });

    req.on('end', function(){
       console.log(buf);
    });
});

区块可能是缓冲区对象。尝试fs.writeSyncfd、chunk.toString@你们为我工作了四天。谢谢