我使用快速路由器来捕获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传入的数据块,没有帮助..
答案 0 :(得分:0)
代码中的req
对象实际上是http.IncomingMessage
流的一个实例。
当它通过data
事件提供信息时,此信息将作为缓冲区提供。
此外,并非所有请求的数据都保证在第一次调用处理程序时可用。
有几种方法可以将此数据捕获为可用字符串。您可以创建一个新字符串并简单地将这些块连接在一起
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);
});
});