#reactjs #post #fetch
#reactjs #Публикация #выборка
Вопрос:
Итак, я пытаюсь сделать запрос к базе данных, которую я настроил. Смысл в том, чтобы отправить сообщение для добавления в таблицу и чтобы оно вернуло мне полный список.
Я продолжаю получать «POST http://localhost:8000/api/folders 400 (неверный запрос)» в консоли. Я знаю, что это POST, поскольку, когда я проверяю базу данных как на DBeaver, так и на POSTman, база данных остается неизменной.
Я попытался написать «name» как «name», и это ничего не изменило.
const postfolder = {
method: 'POST',
body: JSON.stringify({ "name" : f })
};
const getFolder = {
method: 'GET'
};
fetch(`${config.API_ENDPOINT}/folders`, postfolder)
.then(
fetch(`${config.API_ENDPOINT}/folders`, getFolder)
)
.then(res => {
if (!res.ok)
return res.json().then(e => Promise.reject(e))
})
.then(folders => {
this.setState({folders : folders});
})
.catch( error =>{
console.error({ error });
console.log("I fucked up the coding: 001");
});
Редактировать:
Для ясности вот компонент, который определяет f . Хотя у меня был console.log (не показан выше), который проверяет значение и выдает мне правильное.
import React, {Component} from 'react';
//import { NavLink, Link } from 'react-router-dom'
import './AddFolder.css';
export default class AddFolder extends Component{
handleSubmit = (e) => {
e.preventDefault();
console.log("handleSubmit ran");
var nameError = document.getElementById("folderNameError");
if (!e.target.name.value){
nameError.classList.remove("hidden");
return console.log("no name");
}
nameError.classList.add("hidden");
return this.props.addNewFolder(e.target.name.value);
// process form values here
}
render(){
return (
<form className="folderForm" onSubmit={(e) => this.handleSubmit(e)}>
<h3>New Folder</h3>
<label>Text </label>
<input type="text" className="elementName" name="name" id="folderName"/>
<div>
<button type="submit" className="registration__button">
Save
</button>
</div>
<div>
<button type="reset" className="registration__button">
Cancel
</button>
</div>
<div className="errorSpace">
<p className="hidden" id="folderNameError">A name is required</p>
</div>
</form>
)
}
}
Вот краткое изображение базы данных. Это просто имя и идентификатор.
Я могу получить доступ к нему с помощью POSTMAN, поэтому я не верю, что это проблема.
Комментарии:
1. Я думаю, нам нужно что-то знать о том, что прослушивает запрос, прежде чем мы сможем помочь вам выяснить, почему это неверный запрос. Это БД с автоматическим API? (Какой из них? Можете ли вы поделиться схемой для
folders
?) Что-то вроде Express.js конечная точка? (Можете ли вы поделиться кодом?) Мне также интересно, какf
определяется2. Я просто разместил картинку. Запросы get и post работают с POSTMAN.
Ответ №1:
Итак, я обнаружил, что проблема заключалась в том, что мне нужно было добавить к моему запросу на выборку.
У меня это было как:
const postfolder = {
method: 'POST',
body: JSON.stringify({ "name" : f })
};
Это должно быть:
const postfolder = {
method: 'POST',
headers: {
'content-type': 'application/json'
},
body: JSON.stringify(newFolder)
};
Мне нужен был тип содержимого.