【问题标题】:How to delete an item in a json file via http delete request in nodeJS?如何通过nodeJS中的http删除请求删除json文件中的项目?
【发布时间】:2018-11-01 10:55:55
【问题描述】:

所以基本上,我有一个由用户和组数据组成的 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 文件): 删除组.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

        }
    });


});

【问题讨论】:

  • 在你的循环中,你有if (userObj[i].group[j] == groups)groups 设置在哪里,它设置成什么?
  • groups 基本上是在 html 文件中传递的输入(用户输入组名),并且 ngModel 设置为组,该组获取 html 中输入字段的值并将其分配给变量组。现在,如果您看一下上面的 RemoveGroup() 函数,就会在 httpService.delete 请求参数中传递组。

标签: javascript arrays node.js json angular


【解决方案1】:

我认为问题不在于 HTTP DELETE 请求。问题在于如何删除子节点。请参阅下面的代码 sn-p。您可以将组作为数组传递给 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

编码愉快!

【讨论】:

    猜你喜欢
    • 2021-11-30
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    相关资源
    最近更新 更多