如何通过nodeJS中的http删除请求删除json文件中的项目?

时间:2018-11-01 10:55:55

标签: javascript arrays node.js json angular

所以基本上,我有一个包含用户和组数据的JSON文件。我想删除一个特定的组。这是我的JSON文件的样子: authdata.json:

[{
    "name": "Allan",
    "role": ["Group Admin", "Super Admin"],
    "group": ["Cool-Group", "ss"]
}, {
    "name": "super",
    "group": ["Nerd Group"],
    "role": ["Super Admin"]
}, {
    "name": "Terry",
    "role": ["Group Admin"],
    "group": ["Cool-Group"]
}, {
    "name": "Kaitlyn",
    "role": ["Group Admin"],
    "group": ["Nerd-Group"]
}, {
    "name": "Alex",
    "role": ["Group Admin"],
    "group": ["Cool-Group"]
}]

我只是对如何处理nodeJS中的http删除请求感到困惑? 这就是我的角度组件如何将请求发送到服务器: remove.component.ts:

RemoveGroup() {
    this.httpService.delete < any > (this.apiURL + 'deletegroup', {
        group: this.groups
    }).subscribe(
        data => {
            if (data['success'] == true) {
                alert(data.group + " is removed");
            } else {
                alert("No groups found");
            }
        },
        (err: HttpErrorResponse) => {
            console.log(err.message);
        }
    );
}

这是NodeJS的服务器端(读取json文件,将数据分配给变量,尝试删除组(对我不起作用)并写回JSON文件): deletegroup.js:

app.delete('/api/deletegroup', (req, res) => {

    // localhost:3000/api/auth?username=Terry
    var groups = req.body.group;
    var userObj;

    fs.readFile('authdata.json', 'utf8', function(err, data) {
        if (err) {
            console.log(err);
            //Some error happended opening the file. No Success
            res.send({
                'group': '',
                'success': false
            });
        } else {
            userObj = JSON.parse(data);
            for (let i = 0; i < userObj.length; i++) {
                for (let j = 0; i < userObj.length; j++) {
                    if (userObj[i].group[j] == groups) {

                        userObj.splice(userObj.indexOf(groups), 1);
                        //find first instance of user name and success
                    }
                }
            }
            var newdata = JSON.stringify(userObj);

            fs.writeFile('authdata.json', newdata, 'utf-8', function(err) {
                if (err) throw err;
                //Send response that registration was successfull.
                res.send({
                    'group': groups,
                    'success': true
                });
            });
            //no username was found that matched

        }
    });


});

1 个答案:

答案 0 :(得分:0)

我认为问题不在于HTTP DELETE请求。关注的是如何删除子节点。请参见以下代码段。您可以将组作为数组传递给deleteGroup函数,并查看结果。

var data = [{
    "name": "Allan",
    "role": ["Group Admin", "Super Admin"],
    "group": ["Cool-Group", "ss"]
}, {
    "name": "Terry",
    "role": ["Group Admin"],
    "group": ["Cool-Group"]
}];

function deleteGroup(groupArray) {
  groupArray.map((needle)=>{
    data.map((userObj) => {
      if(userObj.group) {
        userObj.group.map((groupName, index)=>{
          if (groupName == needle){
            userObj.group.splice(index)
          }
        });
      } else {
        console.log("No group present for this user.")
      }
    });
  });
  return data
}
//uncomment below line & run in console to see the results
//console.log(deleteGroup(["Cool-Group"]))

直接在Jsbin中试用-https://jsbin.com/pejidag/1/edit?js,console

编码愉快!