Как получить идентификатор добавленного элемента после ответа на запрос? - PullRequest
0 голосов
/ 31 мая 2018

У меня есть функция, которая принимает два входа и отправляет запрос на публикацию в реакции:

addNote(title, content){
    this.setState({title: title, content: content, error: ''}, () => {
        const newNote = {
            title: this.state.title,
            content: this.state.content,
            createdAt: new Date().toISOString(),
            updatedAt: new Date().toISOString()
        };
        fetch('http://localhost:8000/notes', {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
            },
            body: JSON.stringify(newNote)
        })
        .catch(error => {
            this.setState({error: 'Error adding note.'});
            console.error('Error during adding note', error);
        })
        const storedNotes = this.state.notes;
        storedNotes.unshift(newNote);
        this.setState({notes: storedNotes});
        //Adding this.fetchNotes(); here does not work
    });
}

fetchNotes(){
    fetch('http://localhost:8000/notes')
    .then(response => response.json())
    .then(data => this.setState({isLoading: false, notes: data}))
}

Идентификатор примечания - что-то вроде 5b0fac246637e1005ca0a7b5 (данный mongoose).Как я могу получить идентификатор недавно добавленного элемента в реакции, чтобы я мог выполнять другие операции, такие как обновление и удаление заметок в маршруте / notes /: noteId?Когда я добавляю заметку и пытаюсь удалить ее, возникает ошибка 404, поскольку идентификатор не определен.При перезагрузке страницы операции работают нормально.Я не хочу делать почтовый запрос на сервере, так как представление отображается по реакции.

Я снова попытался получить запрос всех заметок после добавления заметки.Это не работает, как задумано.Добавленная заметка не отображается сразу после отправки.

Должен ли я сделать запрос на публикацию с идентификатором сам, скажем, с новой датой (). ToISOString ()?

1 Ответ

0 голосов
/ 31 мая 2018

Почему вы не возвращаете новый идентификатор mongoose после запроса POST?

примерно так:

addNote(title, content){
    this.setState({title: title, content: content, error: ''}, () => {
        const newNote = {
            title: this.state.title,
            content: this.state.content,
            createdAt: new Date().toISOString(),
            updatedAt: new Date().toISOString()
        };

        fetch('http://localhost:8000/notes', {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
            },
            body: JSON.stringify(newNote)
        })
        .then(response => response.json())
        .then(data => {
            // here data.id might contain your objectId

            const storedNotes = this.state.notes;
            storedNotes.unshift(newNote);
            this.setState({notes: storedNotes});
            //Adding this.fetchNotes(); here does not work
        })
        .catch(error => {
            this.setState({error: 'Error adding note.'});
            console.error('Error during adding note', error);
        });
    });
}

fetchNotes(){
    fetch('http://localhost:8000/notes')
    .then(response => response.json())
    .then(data => this.setState({isLoading: false, notes: data}))
}

, но для этого требуется некоторый рефакторинг конечной точки your / notes на вашем сервере.

...