如何使用NODEJS和FileStream将对象追加/添加到JSON对象中的特定对象

彼得角哥们

我有一个带有两个对象的db.json文件:

  • 会员
  • 团队

这是对象...

{
"members": [
    {
        "id": 1,
        "firstName": "John",
        "lastName": "Doe",
        "jobTitle": "Driver",
        "team": "Formula 1 - Car 77",
        "status": "Active"
    },
    {
        "id": 2,
        "firstName": "Alex",
        "lastName": "Sainz",
        "jobTitle": "Driver",
        "team": "Formula 1 - Car 78",
        "status": "Active"
    },
    {
        "id": 3,
        "firstName": "Jeb",
        "lastName": "Jackson",
        "jobTitle": "Reserve Driver",
        "team": "Formula 1 - Car 77",
        "status": "Inactive"
    }
],
"teams": [
    {
        "id": 1,
        "teamName": "Formula 1 - Car 77"
    },
    {
        "id": 2,
        "teamName": "Formula 1 - Car 8"
    },
    {
        "id": 3,
        "teamName": "Formula 2 - Car 54"
    },
  ]
}

我将添加一个新成员,并且我想对该对象进行定位。

这是我的NODE JS代码

// Submit Form!
    app.post('/api/addMember', (req, res) => {

        var isWriteable = 'is writable';
        var isNotWriteable = 'is not writable';

        console.log('REQ BODY: ', req.body);

        request('http://localhost:3000/addMember', (err, response, body) => {
            if (response.statusCode <= 500) {
                res.send(body);
                // console.log('RESPONSE!: ', response);
                // console.log('All Members BODY!: ', body);
                // console.log('REQ!: ', req);
                // Now can we Write to the file
                fs.access(dbFile, fs.constants.W_OK, (err) => {
                    console.log(`${dbFile} ${err ? isNotWriteable : isWriteable}`);

                    if (!err) {
                        fs.open(dbFile, 'wx', (err, fd) => {
                            if (err) {
                                if (err.code === 'EEXIST') {
                                    console.error('DB JSON already exists');


                                    dbFileNewMembers.push(dbFileMembers);
                                    dbFileNewTeams.push(dbFileTeams);

                                    console.log('DB FILE NEW JSON MEMBERS:', dbFileNewMembers);
                                    console.log('DB FILE NEW JSON TEAMS:', dbFileNewTeams);

//                                    saveNewMember(req.body)
//                                            .then(result => {
//
//                                                dbFileNewJSON.push(dbFileNewMembers);
//                                                dbFileNewJSON.push(dbFileNewTeams);
//
//                                                console.log('DB FILE NEW JSON:', dbFileNewJSON);
//
//                                                console.log('RESULT OF SAVE NEW MEMBER: ', result);
//                                            });



//                                    fs.appendFile(dbFile, JSON.stringify(req.body), 'utf8', (err) => {
//                                        if (err) {
//                                            console.log('ERROR in saving a member: BODY: ', err);
//                                        } else {
//
//                                            console.log('SUCCESS saving new member!', req.body);
//                                        }
//                                    });

                                    return;
                                }
                                throw err;
                            }
                        });
                    }
                });

            } else {
                console.log('ERROR! DAMN! We blew it!', err);
            }
        });
    });

我在注释掉的部分尝试了两种功能。

我得到的是,新的TEAM成员添加在对象的“末尾”而不是TEAMS对象的末尾。

这就是我要尝试的全部。

我确实看过:

使用nodejs将json对象附加到文件

将JSON对象添加到JSON对象

但他们没有解决我的问题。

我知道我需要使用appendFile()没问题,但是我需要在主JSON内附加到特定对象,在这种情况下,是TEAMS,在将来的情况下,可能需要更新团队成员,因此,更新具体的团队成员。

谢谢你的帮助。

更新!

KG提出了一个建议,我对此进行了修改。

以下是变量:

var dbFileJSON = require('./db.json');

var obj = JSON.stringify(dbFileJSON);
console.log('DBFILE OBJ: ', obj);

console.log('DBFILE MEMBERS OBJ BEFORE PUSH: ', dbFileJSON);
dbFileJSON['members'].push(newMember);
console.log('DBFILE MEMBERS OBJ AFTER PUSH: ', dbFileJSON);

dbFileJSON = JSON.stringify(dbFileJSON);
console.log('DBFILE MEMBERS OBJ FINAL STRINGIFY: ', dbFileJSON);

dbFileJSON = JSON.parse(dbFileJSON);
console.log('DBFILE MEMBERS OBJ FINAL: ', dbFileJSON);

console.log('UPDATED TEAM members: ', dbFileJSON);

结果直接将其添加到“ MEMBERS”阵列的底部!

在实施KG的答案之前,这是我找到潜在答案的地方。

https://stackoverflow.com/questions/38716025/how-to-replace-old-json-object-with-a-new-one-with-nodejs

现在,剩下的唯一问题是:我需要替换db.json,因为它没有这样做。

我的最后一个问题是:由于我仍在获取原始JSON格式的文件,因此如何用一个新内容替换整个JSON文件。这是server.js文件的顶部,可以帮助您更好地了解自己的位置。

const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const helmet = require('helmet');
const path = require('path');
const request = require('request');
const fs = require("fs");

var hsts = require('hsts');
var xssFilter = require('x-xss-protection');
var nosniff = require('dont-sniff-mimetype');
var dbFileJSON = require('./db.json');

var dbFile = 'db.json';
var dbFileMembers = [];
var dbFileTeams = [];

const app = express();

app.use(cors());
app.use(express.static('assets'));
app.use(bodyParser.json());
app.use(bodyParser.raw());
app.use(bodyParser.urlencoded({ extended: true }));
app.disable('x-powered-by');
app.use(xssFilter());
app.use(nosniff());
app.set('etag', false);

app.use(helmet({
    noCache: false
}));

app.use(hsts({
    maxAge: 15552000 // 180 days in seconds
}));

app.get('/api/members', (req, res) => {
    request('http://localhost:3000/members', (err, response, body) => {
        if (response.statusCode <= 500) {
            res.send(body);
            dbFileMembers.push(body);
            console.log('BODY MEMBERS: ', body);
            console.log('BODY MEMBERS DBFILEMEMBERS: ', dbFileMembers);
            console.log('DBFILE: ', dbFileJSON);
            console.log('SUCCESS! We got the members ', dbFileMembers);
        } else {
            console.log('ERROR getting MEMBERS: ', err);
        }
    });
});

// TODO: Dropdown! DONE!
app.get('/api/teams', (req, res) => {
    request('http://localhost:3000/teams', (err, response, body) => {
        if (response.statusCode <= 500) {
            res.send(body);
            dbFileTeams.push(body);
            console.log('SUCCESS! We got the TEAMS! ', JSON.parse(dbFileTeams));
        } else {
            console.log('ERROR getting TEAMS: ', err);
        }
    });
});

这是我添加新会员的代码

// Submit Form!
app.post('/api/addMember', (req, res) => {

    var isWriteable = 'is writable';
    var isNotWriteable = 'is not writable';

    console.log('REQ BODY: ', req.body);

    request('http://localhost:3000/addMember', (err, response, body) => {

        if (response.statusCode <= 500) {
            res.send(body);

            fs.access(dbFile, fs.constants.W_OK, (err) => {
                console.log(`${dbFile} ${err ? isNotWriteable : isWriteable}`);

                if (!err) {
                    fs.open(dbFile, 'wx', (err, fd) => {
                        if (err) {
                            console.log('FD: ', fd);
                            if (err.code === 'EEXIST') {
                                console.error('DB JSON already exists');
                                console.log('DB FILE JSON MEMBERS:', dbFileMembers);
                                console.log('DB FILE JSON TEAMS:', dbFileTeams);

                                const newMember = req.body;


                                var obj = JSON.stringify(dbFileJSON);
                                console.log('DBFILE OBJ: ', obj);

                                console.log('DBFILE MEMBERS OBJ BEFORE PUSH: ', dbFileJSON);
                                dbFileJSON['members'].push(newMember);
                                console.log('DBFILE MEMBERS OBJ AFTER PUSH: ', dbFileJSON);

                                dbFileJSON = JSON.stringify(dbFileJSON);
                                console.log('DBFILE MEMBERS OBJ FINAL STRINGIFY: ', dbFileJSON);

                                dbFileJSON = JSON.parse(dbFileJSON);
                                console.log('DBFILE MEMBERS OBJ FINAL: ', dbFileJSON);

                                console.log('UPDATED TEAM members: ', dbFileJSON);


                            }
                        }


                    });
                }
            });

        } else {
            console.log('ERROR! DAMN! We blew it!', err);
        }
    });
});

app.get('*', (req, res) => {
    res.sendFile(path.join(__dirname, 'dist/my-app/index.html'));
});

app.listen('8000', () => {
    console.log('Vrrroooom Vrrroooom! Server starting!');
});

而已!任何进一步的评论将是花花公子!

公斤99

如果您不必使用appendFile。您可以尝试这样的事情。

const data = JSON.parse(fs.readFileSync('./db.json'));
data["places"] = { location: 'pta' }
fs.writeFileSync('db.json', JSON.stringify(data, null, 4));

请注意,我使用了阻塞功能。但是沿着这些思路。

编辑:查看您的代码,您可以执行此操作。

app.post('/api/addMember', (req, res) => {
    const filename = './db.json';

    request('http://localhost:3000/addMember', async(err, response, body) => {
        const data = await readFileJson(filename);
        data['newmemeber'] = req.body; // add to object
        await writeFileJSON(filename, JSON.stringify(data, null, 4)); // save data to file.
        res.json({ code: 1, message: 'saved to db!', data: {} })

    });
});

function readFileJson(filename) {
    return new Promise((resolve, reject) => {
        fs.readFile(filename, 'utf-8', function(err, data) {
            if (err) {
                return resolve({});
            }
            try {
                return resolve(JSON.parse(data));
            } catch (err) {
                console.log(err);
                return resolve({});
            }
        });
    });
}

function writeFileJSON(filename, data) {
    return new Promise((resolve, reject) => {
        fs.writeFile(filename, data, function(err, data) {
            if (err) {
                return reject(err);
            }
            return resolve();
        });
    });
}

遵循这些原则行之有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将对象添加到JSON(nodeJS)

来自分类Dev

如何使用Swift在异步完成块中的特定索引处将对象添加到数组

来自分类Dev

如何使用Swift在异步完成块中的特定索引处将对象添加到数组

来自分类Dev

Json:将对象添加到数组

来自分类Dev

使用PHP将对象添加到JSON数组

来自分类Dev

使用PHP将对象添加到JSON数组

来自分类Dev

如何将对象添加到向量中?

来自分类Dev

如何通过拖放将对象添加到UITableView中?

来自分类Dev

如何使用委托将对象添加到NSMutableArray?

来自分类Dev

如何使用 setState 将对象添加到数组列表

来自分类Dev

使用useReducer将对象添加到数组中的数组

来自分类Dev

使用redux将对象添加到数组中的数组

来自分类Dev

使用函数将对象添加到列表中

来自分类Dev

将对象添加到对象数组

来自分类Dev

将对象添加到对象数组

来自分类Dev

如何在Javascript中将对象添加到对象?

来自分类Dev

如何将对象属性添加到对象的属性?

来自分类Dev

如何在JavaScript中将对象添加到对象

来自分类Dev

将对象添加到预分配的对象数组中

来自分类Dev

将对象添加到预分配的对象数组中

来自分类Dev

如何使用Node.js和Mongoose将对象添加到嵌套数组

来自分类Dev

我可以结合使用LINQ和用于将对象添加到集合中的foreach吗?

来自分类Dev

如何按对象特定变量的字母顺序将对象添加到数组列表

来自分类Dev

如何使用 JSON 和 PHP 在表单提交时将我的对象添加到数组中?

来自分类Dev

CQRS / DDD如何使用命令将对象添加到集合中?

来自分类Dev

如何使用jQuery将对象中的值添加到Highchart

来自分类Dev

如何使用反射将对象添加到类的实例的泛型列表属性中

来自分类Dev

如何使用数据库中的密钥将对象添加到NSArray?

来自分类Dev

如何在Python中使用循环将对象添加到类中?

Related 相关文章

  1. 1

    如何将对象添加到JSON(nodeJS)

  2. 2

    如何使用Swift在异步完成块中的特定索引处将对象添加到数组

  3. 3

    如何使用Swift在异步完成块中的特定索引处将对象添加到数组

  4. 4

    Json:将对象添加到数组

  5. 5

    使用PHP将对象添加到JSON数组

  6. 6

    使用PHP将对象添加到JSON数组

  7. 7

    如何将对象添加到向量中?

  8. 8

    如何通过拖放将对象添加到UITableView中?

  9. 9

    如何使用委托将对象添加到NSMutableArray?

  10. 10

    如何使用 setState 将对象添加到数组列表

  11. 11

    使用useReducer将对象添加到数组中的数组

  12. 12

    使用redux将对象添加到数组中的数组

  13. 13

    使用函数将对象添加到列表中

  14. 14

    将对象添加到对象数组

  15. 15

    将对象添加到对象数组

  16. 16

    如何在Javascript中将对象添加到对象?

  17. 17

    如何将对象属性添加到对象的属性?

  18. 18

    如何在JavaScript中将对象添加到对象

  19. 19

    将对象添加到预分配的对象数组中

  20. 20

    将对象添加到预分配的对象数组中

  21. 21

    如何使用Node.js和Mongoose将对象添加到嵌套数组

  22. 22

    我可以结合使用LINQ和用于将对象添加到集合中的foreach吗?

  23. 23

    如何按对象特定变量的字母顺序将对象添加到数组列表

  24. 24

    如何使用 JSON 和 PHP 在表单提交时将我的对象添加到数组中?

  25. 25

    CQRS / DDD如何使用命令将对象添加到集合中?

  26. 26

    如何使用jQuery将对象中的值添加到Highchart

  27. 27

    如何使用反射将对象添加到类的实例的泛型列表属性中

  28. 28

    如何使用数据库中的密钥将对象添加到NSArray?

  29. 29

    如何在Python中使用循环将对象添加到类中?

热门标签

归档