Рубрики
Без рубрики

Go, fetch ()

Использование Fetch in JavaScript Работа над моим проектом портфеля JavaScript для Flatiron School G … Tagged with JavaScript, Fetch, JSON, API.

Использование в JavaScript

Работа над моим проектом портфеля JavaScript для Flatiron School дала мне возможность познакомиться с запросами. Мы должны были использовать Fetch для отправки запросов на нашу Backend Rails. В итоге Фетч оказался полностью ответственной за манипулирование нашим API, нам больше не нужно было отправлять формы и ждать появления новых страниц, JavaScript позаботился обо всем этом для нас. Мы смогли использовать запросы на выборку для получения, публикации, удаления, исправления и обновления нашей базы данных. Это сэкономило время, не полагаясь на необходимость писать представления для всех наших моделей и иметь возможность манипулировать информацией, хранящейся в лучшем виде.

Различные запросы

Когда мы писали наш код, я обнаружил, что полагаюсь на несколько различных ресурсов, чтобы собрать мои запросы. Поскольку это была большая часть проекта JavaScript, я решил написать краткое изложение различных доступных запросов и того, как их использовать.

Fetch – Basic Get запрос

Наш базовый запрос на получение выбора будет выглядеть примерно так (я использовал Fetch, чтобы получить своих пользователей из моей базы данных):

fetch("http://localhost:3000")

Первое, что происходит, это то, что Fetch примет URL, который вы передаете ему, и забрать Обещание объект. Поэтому, когда мы отправляем наш запрос, мы получаем Обещание , что мы должны затем взять этот ответ и превратить его в Json для нашего использования.

fetch("http://localhost:3000")
    .then(resp => resp.json())

Как только у нас есть это Json Мы можем Тогда манипулировать этим дальше.

fetch("http://localhost:3000")
    .then(resp => resp.json())
    .then(users => users.pop())

В примере выше я взял Обещание Я получил, превратил это в Json Тогда у меня был массив Json объекты. Для моего проекта мне нужен был только последний пользователь, который подписал, поэтому я использую users.pop (), чтобы удалить и вернуть последний элемент Json массив, который я получил. Вещество следует отметить, что, хотя я использую .pop (), на самом деле это не влияет на мою базу данных. Это только удаление последнего элемента из * Json ** Объект, который создается из обещания, возвращаемого нашим запросом.**

fetch("http://localhost:3000/users")
    .then(resp => resp.json())
    .then(users => users.pop())
    .then(user => renderUser(user))
};

Теперь, когда дело доходит до рендеринга на моей странице. Я должен обработать ответ дальше. В этом примере я взял Json объект, который я получил в качестве возвращаемого значения от вызова .pop () в предыдущем примере и называется renderUser () на нем. Это необходимо, потому что в противном случае у нас останется только Json что мы ничего не сделали. Метод, который я использую, займет это Json и поместите его таким образом, чтобы его можно было использовать на экране.

Фетч – Пост

Поскольку мы хотим, чтобы все в наших проектах работало на одной странице без перенаправлений, вместо того, чтобы иметь Rails Обработайте наши формы, мы можем использовать JavaScript. Когда мы используем JavaScript для обработки Пост Запрос в наших формах, есть несколько ключевых вещей, которые нужно помнить.

Слушатель событий

Поскольку мы меняем то, что обычно будет делать наша форма, мы добавим слушателя событий к нашему из -за предотвращения действия по умолчанию формы.

const userForm = document.querySelector("body > header > div > div > div.menu > div.user-form > form")

userForm.addEventListener('submit', ...)

В моем примере я определил свою переменную пользователя и добавил. AddeventListener (‘отправить’, …), чтобы прослушать событие отправки.

userForm.addEventListener('submit', event => {
    event.preventDefault()
    postUser(event.target)
})

Когда это «слышит» событие отправки, он сделает две вещи. Главное, что, как правило, будет одинаковым по всему плату, – это вызов .preventDefault (), что предотвратит выполнение формы по умолчанию. Следующее, что я делаю, это передавать событие. Пост Метод, удачно названного Postuser (), я определил в другом месте.

Пост -метод

function postUser(user_data) {

}

Я определил Postuser (), чтобы справиться с моей формой Пост запрос. Я передаю данные своих форм, и с помощью этих данных я отправляю свои пользовательские данные в свой бэкэнд, используя запрос на выброс.

function postUser(user_data) {

    fetch('http://localhost:3000/users', {
            method: 'POST',
}

Первое, что я хочу сделать, это набрать мой Fetch (). Я передаю свой URL и дал JavaScript знать, что это запрос сообщения.

function postUser(user_data) {

    fetch('http://localhost:3000/users', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                Accept: "application/json"
            },
            body: JSON.stringify({
                "name": user_data.name.value,
                "user_handle": user_data.handle.value
            })
        })
}

Затем я вставил заголовки, сообщая своему заявлению, что я буду иметь дело с Json И в теле: я использую json.stringify (), чтобы превратить свой объект JS в Json . Два атрибута, которые есть у моих пользователей, – это «имя» и «user_handle», а внутри моего json.stringify () я беру данные своей формы (user_data) и вытаскиваю значения из соответствующих полей, чтобы назначить их пользователю (user_data.name .value & user_data.handle.value)

function postUser(user_data) {

    fetch('http://localhost:3000/users', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                Accept: "application/json"
            },
            body: JSON.stringify({
                "name": user_data.name.value,
                "user_handle": user_data.handle.value
            })
        })
        .then(res => res.json())
}

Следующим шагом будет принятие полученного ответа и превратить его обратно в Json объект манипулировать …

function postUser(user_data) {

    fetch('http://localhost:3000/users', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                Accept: "application/json"
            },
            body: JSON.stringify({
                "name": user_data.name.value,
                "user_handle": user_data.handle.value
            })
        })
        .then(res => res.json())
        .then((obj_user) => {
            renderUser(obj_user)
        })
}

С этим Json Затем я использую его, чтобы отобрать моего пользователя с помощью renderuser (), который я определил в другом месте.

function postUser(user_data) {

    fetch('http://localhost:3000/users', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                Accept: "application/json"
            },
            body: JSON.stringify({
                "name": user_data.name.value,
                "user_handle": user_data.handle.value
            })
        })
        .then(res => res.json())
        .then((obj_user) => {
            let new_user = renderUser(obj_user)
            const welcome = document.querySelector("body > header > div > div > div:nth-child(3) > div")
        })
        .catch((err) => {
            alert(err.message)
        })
}

Наконец, я добавил .catch (), чтобы обработать любые ошибки, которые возникают в предыдущих шагах.

Выбрать удаление

Я добавил кнопку, чтобы удалить «ручки» из моего приложения. Теперь, так как мы хотим оставить все на одной странице (без перенаправлений), я использовал запрос на получение выбора для Удалить «Ручки» из моей базы данных.

Слушатель событий

Первым шагом, который я сделал, было добавить слушателя в кнопку «Удалить», которую я создал.

handlesContainer.addEventListener('click', (e) => {
    if(e.target.innerText === "Delete Handle") {
            deleteHandle(e.target.id)
        } else if {...}
    }
);

У меня был слушатель событий, прислушиваясь к событиям на моем HandleScontainer, я обработал несколько событий щелчка в этом слушателе, но я буду сосредоточиться только на одном обработке моего УДАЛИТЬ . Я позволил своему слушателю, слушал событие «щелкнуть» по всему контейнеру, чтобы оно могло справиться с удалением любых ручек, доступных внутри, я установил идентификатор каждой из кнопок на идентификатор ручек, поэтому, когда мы называем DeleteHandle () Мы проходим в e.target.id, чтобы иметь возможность удалить правильную ручку.

Функция получения

function deleteHandle(handleId) {
    fetch(`http://localhost:3000/handles/${handleId}`, {
        method: 'DELETE'
    })
}

Я определил свой метод DeleteHandle () для принятия идентификатора, мы интерполируем это число в URL -адрес запроса fetch () для обработки точной ручки, которую мы хотим. Мы вводим «Удалить», чтобы позволить нашему fetch () знать, какой метод: мы используем.

function deleteHandle(handleId) {
    fetch(`http://localhost:3000/handles/${handleId}`, {
        method: 'delete'
    }).then(response =>
        response.json()
      .then(json => {
            return json;
        })
}

После того, как мы удалим нашу ручку, мы принимаем ответ, который получаем, и возвращаем ее обратно в Json Анкет

function deleteHandle(handleId) {
    fetch(`http://localhost:3000/handles/${handleId}`, {
        method: 'delete'
    }).then(response =>
        response.json()
      .then(json => {
            return json;
        })
      .then(clearHandles())
      .then(fetchHandles())
    );
}

После этого я принимаю Call ClearHandles (), чтобы снова очистить данные о старой ручке и FetchHandles (), чтобы получить список и обновленный список.

Проверьте Tweetgrab at https://github.com/rukshanuddin/rails-js-project

Оригинал: “https://dev.to/rukshanuddin/go-fetch-35la”