【问题标题】:Deleting an element in a JSON file删除 JSON 文件中的元素
【发布时间】:2021-03-15 22:10:27
【问题描述】:

我刚刚开始我的第一个项目,正在学习如何编码。我已经将所有用户保存在一个名为 storage.JSON 的 JSON 文件中,并且我有关于在本地存储中以“currentUser”名称登录的用户的信息。我正在尝试创建一个按钮,用户可以在其中从 JSON 文件中删除自己。当我在整个过滤过程中控制台日志时,它可以工作。在我看来,问题在于问题无法在 if 语句之外捕获 allUsers 变量。谁能帮我解决这个问题,以便我可以在函数结束时将 allUsers 发送回 API。

这是我在 API 中的代码:

app.delete('/deleteProfile', (req, res) => {
    
    var allUsers = JSON.parse(fs.readFileSync("storage.JSON"))
    res.json(allUsers)

})

app.post('/deleteProfile', (req, res)=> {
    let reqData = req.body;
    console.log('Post request virker')
    console.log(reqData) 
    var storage = JSON.parse(fs.readFileSync("storage.JSON"))
    storage.push(reqData);
    fs.writeFileSync("storage.JSON", JSON.stringify(storage, null, 2));

    //console.log(reqData);
    res.send(JSON.stringify({mesagge: 'This user has been delete from', storage}));
})

deleteUser.js 中的代码

deleteUser = document.getElementById("deleteBtn")


deleteUser.addEventListener('click', function() {
    
        const xhr = new XMLHttpRequest();
        xhr.responseType = "json"
    
        xhr.addEventListener("readystatechange", function() {
        if(this.readyState === 4) {
            var allUsers = this.response;
            console.log(allUsers);

      
            
          let currentUser = JSON.parse(localStorage.getItem("currentUser"))

            allUsers = allUsers.filter(allUser => allUser.username !== currentUser.username);
            console.log(allUsers);

        } });
                       

        xhr.open("DELETE", "http://localhost:2500/deleteProfile", true);
            
        xhr.setRequestHeader("Content-Type", "application/json");
            
      
        xhr.send(JSON.stringify(allUser));
    })

【问题讨论】:

    标签: javascript node.js json xmlhttprequest crud


    【解决方案1】:

    您应该在 if 块范围之外定义 allUsers 变量并将该数据设置在 if 块中。 在deleteUser.js 试试这个:

        deleteUser = document.getElementById("deleteBtn")
        
        
        deleteUser.addEventListener('click', function() {
                let allUsers;
                const xhr = new XMLHttpRequest();
                xhr.responseType = "json"
            
                xhr.addEventListener("readystatechange", function() {
                if(this.readyState === 4) {
                    allUsers = this.response;
              
                    
                  let currentUser = JSON.parse(localStorage.getItem("currentUser"))
        
                    allUsers = allUsers.filter(allUser => allUser.username !== currentUser.username);
        
                } });
                               
        
                xhr.open("DELETE", "http://localhost:2500/deleteProfile", true);
                    
                xhr.setRequestHeader("Content-Type", "application/json");
                    
              
                xhr.send(JSON.stringify(allUser));
            })
    
    

    【讨论】:

    • 感谢您的帮助@alefseen :-) 当我从 JSON 文件中获取数据并随后使用 post 更新JSON 文件。因为现在该函数运行并在我 console.log 时删除了用户,但它没有更新 JSON 文件。
    • 我认为您在快递中的删除请求没有发送任何响应。如果它是真的,在设置 json 数据`res.json(allUsers).send()` 之后调用发送函数,并且在你的应用程序中只需要替换对旧数据的删除响应
    • 谢谢。当你说我给了替换旧数据的删除响应时,你能详细说明一下吗?
    猜你喜欢
    • 2020-09-18
    • 2022-08-22
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    • 2016-08-05
    • 1970-01-01
    相关资源
    最近更新 更多