Удаление элемента ломает мое приложение и отправляет ошибку с пустым объектом, используя Mongo / Mongoose / NodeJS / Express - PullRequest
0 голосов
/ 02 апреля 2020

Я студент, который в настоящее время разрабатывает окончательный проект для курса NodeJS. Я столкнулся с проблемой и, похоже, не могу найти какие-либо решения погуглить ее Я надеюсь найти здесь руководство. Спасибо за вашу помощь и время заранее!

Моя проблема: мое приложение разрывается с помощью одной кнопки удаления для «Бюджета», но оно не разрывается при удалении элементов расходов / доходов.

1) моя главная страница

2) Когда я щелкаю и удаляю элемент бюджета, приложение разрывается и отправляет пустой объект в виде сообщения об ошибке

3) Где я получаю бюджетное значение от

4) Мой файл мопса, используя каждый / для извлечения значения:

            h1(class="category__titles budget__section") Budget:    
            each budget in budgets
                h2(class="category__subtitle")= budget.budget
                    a(class="blue__bg action__button" href="/update/" + budget._id) Update                
                    a(class="action__button red__bg " href="/delete/" + budget._id) Delete
            h1(class="category__titles") Budget balance
                p(class="category__subtitle")= balance
            h1(class="category__titles blue__bg") Funds Available
            h2(class="category__subtitle")= historyTotal
            h1(class="category__titles red__bg") Expenses Total
            h2(class="category__subtitle")= expenseNumber
            h1(class="category__titles green__bg") Assets Total
            h2(class="category__subtitle")= assetNumber    
    div(class="right__partition")
        h1(class="category__titles") Expense / Assets History
        div(class="categories__container")
            h1(class="history__titles") Item
            h1(class="history__titles") Amount
            h1(class="history__titles") Action
        each report in expenseReport
            div(class="reports__container")
                div 
                    h2(class="red__bg reports__text")= report.expense 
                    h2(class="green__bg reports__text")= report.asset
                div
                    h2(class="red__bg reports__text")= report.expenseAmount 
                    h2(class="green__bg reports__text")= report.assetAmount
                div
                    a(class="blue__bg action__button" href="/update/" + report._id) Update
                    a(class="red__bg action__button" href="/delete/" + report._id) Delete
enter code here

5) Удалить маршрут :

const express = require('express');
const app = express();
const router = express.Router();
const Expenses = require('../models/Expense');

// DELETE

router.get('/delete/:id', async(req, res) => {
    try {
        await Expenses.findByIdAndDelete({ _id: req.params.id });
        res.redirect('/');
    } catch(err) {
        res.render({ message: err })
    }
});

module.exports = router;

6) Единственный способ заставить приложение работать снова - это вручную вставить значение «бюджета» в пн go атлас

7) Удаление элементов расходов / доходов выполняется Не ломать страницу, только бюджетный элемент

1 Ответ

0 голосов
/ 02 апреля 2020

Я думаю, findByIdAndDelete просто берет id, а не объект. документы :

await Expenses.findByIdAndDelete(req.params.id);

Ваш код будет работать с findOneAndDelete хотя:

await Expenses.findOneAndDelete({ _id: req.params.id });

После того, как вы получите правильный запрос Mon goose, вам нужно отредактировать res.redirect(), добавив код состояния 303, например:

res.redirect(303, '/');

Если вы пропустите код состояния перенаправления, Express по умолчанию будет 302, что является проблемой, которая хорошо объяснена здесь и здесь .

Проверьте журналы для каждого метода. Вот с res.redirect('/'):

delete no status

А вот с предоставленным кодом состояния res.redirect(303, '/'):

redirect with status

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...