#vue.js #put
#vue.js #положить
Вопрос:
Я уже 4-й день привыкаю к Vue CLI и пытаюсь выполнить HTTP-запрос put, но на самом деле не знаю, с чего начать. Я настроил его таким образом, что когда пользователь нажимает кнопку «Мне нравится» на определенном продукте, он добавляет «Нравится» к реальному продукту, но я хочу, чтобы он сохранялся в моей базе данных. Я был бы очень признателен за любую помощь, но также знайте, что я все еще учусь и совершенно новичок в этой библиотеке JavaScript. Я также использую ресурс Vue для выполнения этого запроса PUT.
Когда я нажимаю кнопку «Мне нравится», я могу подтвердить, что она добавляет лайк этому конкретному продукту и отображает количество лайков для этого конкретного продукта. Просто понятия не имею, как правильно отправить его в базу данных.
Вот мой код для запроса PUT. Нужны ли мне заголовки и
methods: {
updateLikes(product){
//make a put request to the backend to update the amount of likes on
//the specific product when the user click like button
product.likes = product.likes 1
this.$http.put(`https://tap-on-it-exercise-backend.herokuapp.com/products/${product.likes}`, {
//send updated likes for the product to the backend
})
//close the modal after user like
this.modalShow = false
console.log(product.likes);
}
}
обновить код:
methods: {
updateLikes(product){
let newProductLikes = product.likes 1
//make a put request to the backend to update the amount of likes on
//the specific product when the user click like button
console.log('new', newProductLikes);
fetch(`https://tap-on-it-exercise-backend.herokuapp.com/products/${product.likes}`, {
method: 'PUT',
mode: "cors",
cache: "no-cache",
credentials: "same-origin",
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
// send updated like to the server
likes: newProductLikes
})
})
}
}
Комментарии:
1. Какой результат вы получаете на вкладке сеть в инструментах разработчика вашего браузера? 200, 404 и т.д.? Выдает ли ваш сервер какие-либо ошибки?
Ответ №1:
Вы можете использовать собственный fetch()
API браузера.
fetch(`https://tap-on-it-exercise-backend.herokuapp.com/products/${product.likes}`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
// data you intend to send as JSON to the server
whatever: 'ding!'
})
})
Комментарии:
1.
this.$http
на самом деле выглядит как вызов ресурса Vue github.com/pagekit/vue-resource2. @Maciejk было да, я это заметил. Я быстро просматриваю ресурс Vue.
3. Спасибо за ответ, я совсем новичок в подобных запросах PUT, поэтому в разделе stringify я добавляю это: product.likes = product.likes 1. затем он выдает мне сообщение об ошибке: «Неожиданный токен, ожидаемый «, » » в этот период между продуктом и лайками. Я немного запутался с потоком данных, я думаю.
4. @TylerOreskey скорее всего, вы используете equals внутри объекта / хэша / словаря.
{whatever = 'ding'}
вместо правильного{whatever: 'ding'}
синтаксиса5. У меня это есть, и это не вносит никаких изменений в базу данных, я собираюсь обновить свой код в моем сообщении, если вам интересно.
Ответ №2:
В ресурсе Vue вы можете выполнить HTTP-запрос PUT, как показано ниже
this.$http.put('/someUrl', {your request body}).then(response => {
this.product.likes = response.body.likes; // update your data from the response
}, error => {
// error callback
});
Вы можете посмотреть на документы по ресурсам Vue для получения более подробной информации.
Также я думаю, что вам не следует вручную увеличивать количество лайков к продукту, вы можете установить это из ответа на ваши запросы, если ответ включает обновленное количество лайков к продукту, потому что, возможно, лайки к продукту не обновлялись на сервере.
Комментарии:
1. Этот ответ не относится к исходному вопросу. Если вы хотите прокомментировать или внести предложения, используйте для этого комментарии и, пожалуйста, удалите этот вопрос.
2. Это всего лишь рекомендация, и я не могу прокомментировать из-за моего номера репутации. Я увидел ваш ответ и подумал, что он дает больше представления о вопросе, но, конечно, я отредактирую свой ответ в соответствии с исходным вопросом
Ответ №3:
Во-первых, вам нужно убедиться, что вы можете отправить запрос PUT напрямую, без использования Vue. Вы можете сделать это с помощью Curl или Postman.
Во-вторых, проверьте вкладку Сеть в инструментах разработчика вашего браузера (F12) при отправке запроса из Vue. Правильно ли отправлен запрос? Сервер возвращает ошибку?
Затем проверьте, нет ли проблем с CORS. Есть большая вероятность, что ваш запрос отклонен, потому что он отправляется с localhost на ваш сервер, и вы не разрешили правильный доступ CORS.
Комментарии:
1. Заголовки Cors есть, и я могу просто повторно запустить свои начальные данные и повторно нажать на heroku, чтобы сбросить базу данных