Когда на сервере генерируются идентификаторы для документов, как клиент может правильно отправлять HTTP-запросы на удаление? Поскольку для запросов HTTP Delete требуется идентификатор документа для маршрутизации на сервер, но идентификаторы генерируются на сервере, как веб-интерфейс может знать сгенерированные идентификаторы?
На моем сервере:
let persons = [ // my "database"
{
"name": "Arto Hellas",
"number": "040-123456",
"id": 1
},
{
"name": "test1",
"number": "111-111-1111",
"id": 4168 //GENERATED AFTER RECEIVING AN HTTP POST REQUEST
},
{
"name": "test2",
"number": "222-222-2222",
"id": 839 //GENERATED AFTER RECEIVING AN HTTP POST REQUEST
}
];
app.delete('/api/persons/:id', (req,res) => {
let id = Number(req.params.id);
persons = persons.filter(person => person.id !== id);
res.json(persons);
});
const generateId = () => {
return Math.floor(Math.random() * 10000); //0 to 9999
}
app.post('/api/persons', (req,res) => {
let body = req.body;
let newPerson = {
name: body.name,
number: body.number,
id: generateId()
}
persons = persons.concat(newPerson);
res.json(persons);
});
Когда мой веб-интерфейс создает запрос HTTP Post к бэкэнду, он отправляет имя и номер. Бэкэнд получает запрос Post и создает объект JS с Name, Number, а также генерирует для него идентификатор, а затем добавляет его в мой массив «database».
Вот мой рассматриваемый компонент React с возможностью удаления,
const PhoneBookEntry = ({ name, number, persons, setPersons}) => {
const deletePerson = () => {
phonebookComm
.delPerson(id) // *** how can my frontend determine the IDs generated in the backend?
.then( res => {
//updating my application's persons state
persons.splice(persons.findIndex(element => element.name === name), 1 );
setPersons(persons.map(person => person.name !== name ? person : null));
})
.catch( error => {
console.log('error', error);
})
}
return (
<div>
<div className="personAndDelBtn">{name} {number} </div>
<button className="personAndDelBtn" onClick={deletePerson}>delete</button>
</div>
);
}
Где phonebookComm использует axios:
const delPerson = id => {
return axios.delete(`${baseUrl}/${id}`).then(res => res.data);
}
Как получить идентификаторы из бэкэнда, дляHTTP-запросы на удаление в веб-интерфейсе?
Поскольку бэкэнд генерирует идентификатор для каждого документа, веб-интерфейс не знает идентификатора документа. Когда веб-интерфейсу необходимо отправить HTTP-запрос на удаление, как он может узнать, какой идентификатор использовать?