Node.js 如何从POST请求负载中提取特定信息并保存到txt文件中?

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

嗨,我想知道我能用什么方法只将“结果”部分提取到txt文件中。有效负载是从从设备到我自己的服务器的POST请求中提取的。例如:

{
  "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,但无效