Node.js 如何从POST请求负载中提取特定信息并保存到txt文件中?
嗨,我想知道我能用什么方法只将“结果”部分提取到txt文件中。有效负载是从从设备到我自己的服务器的POST请求中提取的。例如:Node.js 如何从POST请求负载中提取特定信息并保存到txt文件中?,node.js,post,request,Node.js,Post,Request,嗨,我想知道我能用什么方法只将“结果”部分提取到txt文件中。有效负载是从从设备到我自己的服务器的POST请求中提取的。例如: { "cid": "042071004033", "time": 1593673402, "front_vaule": 94, "scale_out_x": 1, "scale_out_y": 0.5, "sharpe
{
"cid": "042071004033",
"time": 1593673402,
"front_vaule": 94,
"scale_out_x": 1,
"scale_out_y": 0.5,
"sharpen_ness": 89,
"track_id": 155,
"type": 1,
"upload_face_size": 120,
"upload_id": 8,
"result": {
"person_id": 123456,
"person_name": "",
"age": 0,
"sex": "male",
"temperature": 37,
"confidence": 0,
"person_type": 0,
"facemask": 1
}
我想保存到txt文件的唯一JSON负载是
"person_id": "",
"person_name": "",
"age": 0,
"sex": "male",
"temperature": 37,
"confidence": 0,
"person_type": 0,
"facemask": 1
下面是我的当前代码,请告诉我在哪里插入建议的代码,谢谢
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const router = express.Router();
var fs = require('fs');
app.use(bodyParser.json({ limit: '10mb', extended: true, parameterLimit: 1000000 }));
app.use(bodyParser.urlencoded({ limit: '10mb', extended: true, parameterLimit: 1000000 }));
app.post('/face', (req, res) => {
console.log('POST');
//console.log(req.body);
data = req.body;
//console.log(data);
res.status(200).json('200OK');
//string data from JSON to txt and overwrite existing txt data
var data = JSON.stringify(data.result, null, 2);
//console.log(data.result.person_id);
fs.writeFileSync(`${data.result.person_id}-database.txt`, data, function (err) {
if (err) {
console.log('Error logging data to txt file!');
} else {
console.log('Logged into text file successfully!');
}
})
});
const server = app.listen(9000, () => {
console.log('server listening on port', server.address().port);
});
错误日志:
POST
TypeError: Cannot read property 'person_id' of undefined
at C:\Users\gohyu\Desktop\nodetestapi\server.js:20:37
at Layer.handle [as handle_request] (C:\Users\gohyu\Desktop\nodetestapi\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\gohyu\Desktop\nodetestapi\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\gohyu\Desktop\nodetestapi\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\gohyu\Desktop\nodetestapi\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\gohyu\Desktop\nodetestapi\node_modules\express\lib\router\index.js:281:22
at Function.process_params (C:\Users\gohyu\Desktop\nodetestapi\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\gohyu\Desktop\nodetestapi\node_modules\express\lib\router\index.js:275:10)
at urlencodedParser (C:\Users\gohyu\Desktop\nodetestapi\node_modules\body-parser\lib\types\urlencoded.js:82:7)
at Layer.handle [as handle_request] (C:\Users\gohyu\Desktop\nodetestapi\node_modules\express\lib\router\layer.js:95:5)
只要做
JSON.stringify(data.result)
就足够了。不过它是一个简单的对象。只需执行JSON.stringify(data.result)
。这是一个简单的对象。哦,是的,谢谢,我能得到结果。但是,是否可以为每一次提交创建一个新的txt文件?当然可以。您可以为文件名选择一些唯一标识符,如person\u id(如果这是唯一的,那么您可以使用其他标识符,如当前时间戳?),例如:fs.writeFileSync(`${data.result.person\u id}-database.txt`,data,done)
我已尝试应用此选项,但我收到了此错误:“TypeError:无法读取未定义的属性'person\u id'”看起来响应中缺少结果
字段。您能否打印出整个数据
并查看缺少的内容。试图控制日志data.result.person\u id和data.person\u id但不可用是的,谢谢,我能够获得结果,但是是否可以为每次新提交创建一个新的txt文件?当然。您可以为文件名选择一些唯一标识符,如person\u id(如果这是唯一的,那么您可以使用其他标识符,如当前时间戳?),例如:fs.writeFileSync(`${data.result.person\u id}-database.txt`,data,done)
我已尝试应用此选项,但我收到了此错误:“TypeError:无法读取未定义的属性'person\u id'”看起来响应中缺少结果
字段。您能否打印出整个数据并查看缺少的内容。尝试控制台记录data.result.person\u id和data.person\u id,但无效