Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.11.2018, 13:43
Интересующийся
Отправить личное сообщение для AndriiS Посмотреть профиль Найти все сообщения от AndriiS
 
Регистрация: 05.09.2018
Сообщений: 28

Помогите найти ошибку в коде
Здравствуйте! Я разбираю программу, которая работает с REST сервисом.
Программа состоит из функций:
1. getAllUsers() - возвращает список всех пользователей в БД.
2. getUserById(id) - возвращает пользователя с переданным id.
3. addUser(name, age) - заносит юзера в БД.
4. removeUser(id) - удаляет юзера из БД по указанному id.

Последняя функция не работает. Кнопка "Edit".
5. updateUser(id, user) - должна обновлять данные пользователя по id.

Помогите пожалуйста найти ошибку, - уже глаза проглядел все. :-)

Буду крайне благодарен!

<div class="container">
            <form class="search-form">
                <input type="text" name="input-value" placeholder="Enter user id">
                <button class="mdc-btn js-post" type="submit">get user by id</button>
                <button class="mdc-btn js-post-more" type="submit">get all users</button>
                <button class="mdc-btn js-delete" type="submit">delete user</button>
                <button class="mdc-btn js-edit" type="submit">edit user</button>
              </form>
              <p class="result-search-form"></p>
              <form class="add-form">
                <input class = "name" type="text" name="input-name" placeholder="Enter user name">
                <input class = "age" type="text" name="input-value" placeholder="Enter user age">
                <button class="mdc-btn js-add" type="submit">add user</button>
               
              </form>
              <p class="result-add-form"></p>
          </div>



"use strict";


const refs = {
    searchForm: document.querySelector(".search-form"),
    addForm: document.querySelector(".add-form"),
    input: document.querySelector("input"),
    postBtn: document.querySelector(".js-post"),
    postBtnAll: document.querySelector(".js-post-more"),
    btnAdd: document.querySelector(".js-add"),
    deleteBtn: document.queryCommandValue(".js-delete"),
    resultSearchForm: document.querySelector(".result-search-form"),
    inputName: document.querySelector(".name"),
    inputAge: document.querySelector(".age"),
    btnEdit: document.querySelector(".js-edit"),
    baseUrl: "https://test-users-api.herokuapp.com/users/"
}
refs.searchForm.addEventListener('click', searchFormEvent);

function searchFormEvent(evt) {
    evt.preventDefault();
    let target = evt.target;
    if (target.nodeName !== 'BUTTON') return;
    switch (true) {
        case (target.classList.contains('js-post')):
            {
                return getUserById();
                break
            }
        case (target.classList.contains('js-post-more')):
            {
                return getAllUsers();
                break
            }
        case (target.classList.contains('js-delete')):
            {
                return removeUser();
                break
            }

    }
}

function getAllUsers(evt) {

    fetch(refs.baseUrl, {
            method: 'GET',
            headers: {
                'Content-Type': 'application/json',
                'X-Custom-Header': 'custom value'
            }
        })
        .then(response => {
            if (response.ok) return response.json();
            throw new Error(`Error while fetching data: ${response.statusText}`);
        })
        .then(data => updateViewList(data))
        .catch(error => console.log("Error: " + error));
}


function getUserById() {

    const id = refs.input.value;
    fetch(`${refs.baseUrl}${id}`, {
            method: 'GET',
            headers: {
                'Content-Type': 'application/json',
                'X-Custom-Header': 'custom value'
            }
        })
        .then(response => {
            if (response.ok) return response.json();
            throw new Error(`Error while fetching data: ${response.statusText}`);
        })
        .then(data => {
            let user = data.data;
            refs.resultSearchForm.innerHTML = `
          <p>ID: ${user.id} </p>
          <p>Name: ${user.name}</p>
          <p>Age: ${user.age}</p>`;
        })
        .catch(error => console.log("Error: " + error));
}

function removeUser() {

    let id = refs.input.value;
    fetch(`${refs.baseUrl}${id}`, {
            method: "DELETE"
        })
        .then(response => {
            if (response.ok) return response.json();
            throw new Error(`Error while fetching data: ${response.statusText}`);
        })
        .then(data => {
            let user = data.data;
            refs.resultSearchForm.innerHTML =
                `User by ${user.id} has been deleted
       <p> Id : ${user.id}</p>
       <p> Name : ${user.name}</p>
       <p> Age : ${user.age}</p>`
        })
        .catch(error => console.log("Error: " + error));
}

refs.addForm.addEventListener('click', addFormEvent)

function addFormEvent(evt) {
    evt.preventDefault();
    let target = evt.target;
    if (target.nodeName !== 'BUTTON') return;
    switch (true) {
        case (target.classList.contains('js-add')):
            {
                return addUser();
                break
            }
        case (target.classList.contains('js-edit')):
            {
                return updateUser();
                break
            }
    }
}

function addUser() {
    const name = refs.inputName.value;
    const age = refs.inputAge.value;
    if (name.length < 2 && (age.length !== 0 || age !== string)) return;
    fetch(refs.baseUrl, {
            method: 'POST',
            body: JSON.stringify({
                name,
                age
            }),
            headers: {
                "Content-type": "application/json; charset=UTF-8"
            }
        })
        .then(response => {
            if (response.ok) return response.json();
            throw new Error(`Error while fetching data: ${response.statusText}`);
        })
        .then(data => {
            let user = data.data;
            refs.resultSearchForm.innerHTML =
                `User was adedd
       <p> Id : ${user._id}</p>
       <p> Name : ${user.name}</p>
       <p> Age : ${user.age}</p>`
        })
        .catch(error => console.log("Error: " + error));
}

function updateUser() {
    let id = refs.input.value;
    const user = {
        name: userName,
        age: userAge,
    }
    fetch(`${refs.baseUrl}${id}`, {
            method: "PUT",
            body: JSON.stringify(user),
            headers: {
                "Content-type": "application/json; charset=UTF-8"
            }
        })
        .then(response => {
            if (response.ok) return response.json();
            throw new Error(`Error while fetching data: ${response.statusText}`);
        })
        .then(data => {
            let user = data.data;
            refs.resultSearchForm.innerHTML =
                `User by ${user.id} has been updated
         <p> Id : ${user.id}</p>
         <p> Name : ${user.name}</p>
         <p> Age : ${user.age}</p>`
        })
        .catch(error => console.log("Error: " + error));

}

function updateViewList(obj) {
    let elem = obj.data;
    refs.resultSearchForm.innerHTML = ` <table>
   <tr><th>ID</th><th>NAME</th><th>AGE</th></tr>
   <tbody></tbody></table>`;
    const tbody = document.querySelector('tbody');
    elem.map(el => {
        let item = `<tr>
      <td>${el.id}</td>
      <td>${el.name}</td>
      <td>${el.age}</td>
       </tr>`;
        tbody.innerHTML += item;
    });
}
Ответить с цитированием
  #2 (permalink)  
Старый 10.11.2018, 14:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от AndriiS
updateUser(id, user)
что такое userName строка 159

Последний раз редактировалось рони, 10.11.2018 в 14:16.
Ответить с цитированием
  #3 (permalink)  
Старый 10.11.2018, 14:45
Интересующийся
Отправить личное сообщение для AndriiS Посмотреть профиль Найти все сообщения от AndriiS
 
Регистрация: 05.09.2018
Сообщений: 28

Сообщение от рони Посмотреть сообщение
что такое userName строка 159
User по условию объект с полями name и age. При редактировании туда должны подставиться новые значения.
Ответить с цитированием
  #4 (permalink)  
Старый 10.11.2018, 15:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от AndriiS
При редактировании туда должны подставиться новые значения.
так подставьте эти новые значения userName из чего возникает у вас?
Ответить с цитированием
  #5 (permalink)  
Старый 10.11.2018, 15:56
Интересующийся
Отправить личное сообщение для AndriiS Посмотреть профиль Найти все сообщения от AndriiS
 
Регистрация: 05.09.2018
Сообщений: 28

Сообщение от рони Посмотреть сообщение
так подставьте эти новые значения userName из чего возникает у вас?
Вопрос "из чего возникает?", если я вопрос правильно понял:

Имя и возраст вводит в поля пользователь, потом они должны подмениться в редактируемом объекте.
Ответить с цитированием
  #6 (permalink)  
Старый 10.11.2018, 15:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от AndriiS
Имя и возраст вводит в поля пользователь,
смотрите на строки 128 и 129, и где они в updateUser?
Ответить с цитированием
  #7 (permalink)  
Старый 10.11.2018, 16:45
Интересующийся
Отправить личное сообщение для AndriiS Посмотреть профиль Найти все сообщения от AndriiS
 
Регистрация: 05.09.2018
Сообщений: 28

Я уже раньше эти значения подставлял в функцию updateUser вместо значений ключей объекта user, но не срабатывает.

Я наверное в синтаксисе ошибку делаю, я не знаю...

/*
function updateUser() {
let id = refs.input.value;
// let name = refs.inputName.value;
// let age = refs.inputAge.value;
const user = {
name: refs.inputName.value,
age: refs.inputAge.value,
}
fetch(`${refs.baseUrl}${id}`, {
method: "PUT",
body: JSON.stringify(user),
*/

и так:

/*
function updateUser() {
let id = refs.input.value;
let name = refs.inputName.value;
let age = refs.inputAge.value;
// const user = {
// name: userName,
// age: userAge,
// }
fetch(`${refs.baseUrl}${id}`, {
method: "PUT",
body: JSON.stringify(user),
headers: {
"Content-type": "application/json; charset=UTF-8"
}
*/
Ответить с цитированием
  #8 (permalink)  
Старый 10.11.2018, 17:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

AndriiS,refs.inputName
так проверьте первый вариант есть ли элемент refs.inputName есть ли значение refs.inputName.value
может весь скрипт поставить вниз страницы
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите, я не могу найти погрешностей в коде!!! MrProgrammer Events/DOM/Window 5 29.05.2017 14:21
Не работает чат. Помогите найти ошибку. SuperGangster AJAX и COMET 0 29.07.2015 16:22
Помогите найти ошибку в скрипте alex2396242 Ваши сайты и скрипты 2 17.06.2013 00:51
Помогите найти ошибку... AJAX проверка существования e-mail в БД Murmurianez AJAX и COMET 1 03.08.2011 18:49
Помогите найти ошибку в скрипте sdff AJAX и COMET 4 21.07.2008 19:33