Express.js 存在 EJS 应用程序错误:编辑表单未指示 post 的当前类别
Express.js with EJS application bug: the edit form does not indicate the current category of the post
我正在研究 blogging application (click the link to see the GitHub repo) with Express, EJS 和 MongoDB。
我有 Posts 和 Post 类别,每个类别都在自己的集合中。
在 Edit posts 表单中(以及在 Add New Post 表单中)有一个包含可用类别的 select-框:
<% 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>
<% } %>
问题是上面的 select-box 没有 post 当前进入、select 的类别.我一直没能找出原因。
这也不起作用:
<option value="<%= category._id %>" <%= category._id == post.category._id ? 'selected' : ''; %>><%= category.cat_name %></option>
在 posts 控制器中我有:
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'));
}
});
}
}
我做错了什么?
尝试确保比较 2 个字符串:
<option value="<%= category._id %>" <%= category._id.toString() == post.category._id.toString() ? 'selected' : ''; %>><%= category.cat_name %></option>
我正在研究 blogging application (click the link to see the GitHub repo) with Express, EJS 和 MongoDB。
我有 Posts 和 Post 类别,每个类别都在自己的集合中。
在 Edit posts 表单中(以及在 Add New Post 表单中)有一个包含可用类别的 select-框:
<% 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>
<% } %>
问题是上面的 select-box 没有 post 当前进入、select 的类别.我一直没能找出原因。
这也不起作用:
<option value="<%= category._id %>" <%= category._id == post.category._id ? 'selected' : ''; %>><%= category.cat_name %></option>
在 posts 控制器中我有:
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'));
}
});
}
}
我做错了什么?
尝试确保比较 2 个字符串:
<option value="<%= category._id %>" <%= category._id.toString() == post.category._id.toString() ? 'selected' : ''; %>><%= category.cat_name %></option>