Express. js с E JS ошибка приложения: форма редактирования не указывает текущую категорию сообщения - PullRequest
1 голос
/ 17 апреля 2020

Я работаю над приложением для ведения блога (нажмите на ссылку, чтобы увидеть репозиторий GitHub ) с Express, E JS и MongoDB.

У меня есть сообщений и Категории сообщений , каждая в своей коллекции.

В Редактировать сообщения (а также в форме Добавить новое сообщение ) есть поле выбора с доступными категориями:

<% if (categories) { %>
    <div class="form-group">
        <label for="categores">Choose a post category</label>
        <select id="categores" name="category" class="form-control">
            <% categories.forEach(function(category, index) { %>
                <option value="<%= category._id %>" selected="<%= category._id == post.category._id ? 'selected' : ''; %>"><%= category.cat_name %></option>
            <% }); %>
        </select>
   </div>
<% } %>

Проблема в том, что что поле выбора выше не имеет категории, выбранной для записи в настоящее время . Я не могу выяснить, почему.

Это тоже не работает:

<option value="<%= category._id %>" <%= category._id == post.category._id ? 'selected' : ''; %>><%= category.cat_name %></option>

В контроллере сообщений у меня есть:

exports.editPost = (req, res, next) => {
    const postId = req.params.id;

    Post.findById(postId, function(err, post) {
        const categories = Category.find({}, (err, categories) => {
            if (err) {
                console.log('Error: ', err);
            } else {
                res.render('admin/editpost', {
                    layout: 'admin/layout',
                    website_name: 'MEAN Blog',
                    page_heading: 'Dashboard',
                    page_subheading: 'Edit Post',
                    categories: categories,
                    post: post
                });
            }
        });
    });
}

exports.updatePost = (req, res, next) => {

    const query = {
        _id: req.params.id
    }

    const form = {
        titleholder: req.body.title,
        excerptholder: req.body.excerpt,
        bodyholder: req.body.body
    };

    const errors = validationResult(req);

    const post = {};

    post._id = req.params.id;
    post.title = req.body.title;
    post.short_description = req.body.excerpt
    post.full_text = req.body.body;
    post.category = req.body.category;
    if (req.file) {
        post.post_image = req.file.filename;
    }

    if (!errors.isEmpty()) {
        req.flash('danger', errors.array())
        res.render('admin/editpost', {
            layout: 'admin/layout',
            website_name: 'MEAN Blog',
            page_heading: 'Dashboard',
            page_subheading: 'Edit Post',
            form: form,
            post: post
        });
    } else {
        Post.update(query, post, function(err) {
            if (err) {
                console.log(err);
                return;
            } else {
                req.flash('success', "The post was successfully updated");
                req.session.save(() => res.redirect('/dashboard'));
            }
        });
    }
}

Что я делать неправильно?

1 Ответ

2 голосов
/ 17 апреля 2020

Убедитесь, что вы сравниваете 2 строки:

<option value="<%= category._id %>" <%= category._id.toString() == post.category._id.toString() ? 'selected' : ''; %>><%= category.cat_name %></option>
...