Я только начал свой первый проект, собираясь научиться программировать. Я сохранил всех пользователей в файле JSON с именем storage.JSON, и у меня есть информация о пользователе, который вошел в локальное хранилище под именем «currentUser». Я пытаюсь создать кнопку, на которой пользователь может удалить себя из файла JSON. Когда я консольного журнала на протяжении всей моей фильтрации, он работает. Мне кажется, проблема в том, что проблема не может уловить переменную allUsers вне оператора if. Может ли кто-нибудь помочь мне решить эту проблему, чтобы я мог отправить всех пользователей обратно в 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));
    })
0
CodingBeginner 3 Дек 2020 в 23:31

1 ответ

Лучший ответ

Вы должны определить переменную allUsers вне области действия блока if и установить эти данные в блоке 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));
        })

1
alefseen 3 Дек 2020 в 20:47