首页 > 解决方案 > 如何从我的 POST 请求负载中提取特定信息并保存到 txt 文件中?

问题描述

嗨,我想知道我可以用来仅将其“结果”部分提取到 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)

标签: node.jspostrequest

解决方案


应该足够了JSON.stringify(data.result)。虽然这是一个简单的对象。


推荐阅读