Express.js 应用程序错误:删除 post 找不到路由
Express.js application bug: delete post route is not found
我正在研究 blogging application (click the link to see the GitHub repo) with Express, EJS 和 MongoDB。
我无法通过 AJAX 删除 post。
在我的 仪表板 路由文件 (routes\admin\dashboard.js
) 中,我有:
// Delete Post
router.delete('/post/delete/:id', dashboardController.deletePost);
在我的仪表板控制器中:
exports.deletePost = (req, res, next) => {
const postId = req.params.id;
posts.findByIdAndRemove(postId, function(err){
if (err) {
console.log('Error: ', err);
}
res.sendStatus(200);
});
}
在 table 中列出 post 的视图中,每个按钮都有 "Edit" 和 "Delete" 按钮:
<% if (posts) { %>
<% posts.forEach(function(post) { %>
<tr data-id="<%= post._id %>" class="d-flex">
<td class="col-1"></td>
<td class="col-4 col-lg-5">
<%= post.title %>
</td>
<td class="col-2"></td>
<td class="col-2"></td>
<td class="col-3 col-lg-2 text-right">
<div class="btn-group">
<a href="#" class="btn btn-sm btn-success">Edit</a>
<a href="#" class="btn btn-sm btn-danger delete-post" data-id="<%= post._id %>">Delete</a>
</div>
</td>
</tr>
<% }); %>
<% } else { %>
<tr>
<td colspan="5">There are no posts</td>
</tr>
<% } %>
终于在 public\assets\js\admin.js
我有:
$(document).ready(function(){
$('.delete-post').on('click', function(evt){
evt.preventDefault();
let postId = $(this).data('id');
if(confirm('Delete this post?')) {
$.ajax({
url: '/post/delete/' + postId,
method: 'GET',
success: function(deleteMsg){
$('tr[data-id="' + postId +'"]').fadeOut('250');
}
});
}
});
});
我知道这足以使删除操作成功,但事实并非如此。
更新:
如果我用 url: '/dashboard/post/delete/' + postId,
替换 url: '/post/delete/' + postId,
,我会得到 500 internal server error
。我在网络选项卡中看到 posts is not defined
。
我错过了什么?
我是这样做的,为了完成 运行ning 示例克隆 更新 node-cheat XPressBlog 和 运行 节点索引后跟 npm i
.
将 delete
添加到 routes/front-end/posts.js,例如:
// Delete Single Post
router.delete('/:id', postsController.deleteSinglePost);
将 deleteSinglePost
添加到 controllers/front-end/posts.js,例如:
exports.deleteSinglePost = (req, res, next) => {
const {id} = req.params;
res.send(`This will DELETE post with id : ${id}`);
};
这是在查看index.js
的基础上完成的,即:
const dashboardRoute = require("./routes/admin/dashboard");
app.use('/dashboard', dashboardRoute);
const postsRoute = require('./routes/front-end/posts');
app.use('/', postsRoute);
curl -X DELETE http://localhost:3000/100:
This will DELETE post with id : 100
我是这样解决问题的:
1) 我将 posts.findByIdAndRemove
替换为 Post.findByIdAndRemove
:
exports.deletePost = (req, res, next) => {
const postId = req.params.id;
Post.findByIdAndRemove(postId, function(err){
if (err) {
console.log('Error: ', err);
}
res.sendStatus(200);
});
}
2) 我在 jQuery 片段中用 url: '/dashboard/post/delete/' + postId,
替换了 url: '/post/delete/' + postId,
。
我正在研究 blogging application (click the link to see the GitHub repo) with Express, EJS 和 MongoDB。
我无法通过 AJAX 删除 post。
在我的 仪表板 路由文件 (routes\admin\dashboard.js
) 中,我有:
// Delete Post
router.delete('/post/delete/:id', dashboardController.deletePost);
在我的仪表板控制器中:
exports.deletePost = (req, res, next) => {
const postId = req.params.id;
posts.findByIdAndRemove(postId, function(err){
if (err) {
console.log('Error: ', err);
}
res.sendStatus(200);
});
}
在 table 中列出 post 的视图中,每个按钮都有 "Edit" 和 "Delete" 按钮:
<% if (posts) { %>
<% posts.forEach(function(post) { %>
<tr data-id="<%= post._id %>" class="d-flex">
<td class="col-1"></td>
<td class="col-4 col-lg-5">
<%= post.title %>
</td>
<td class="col-2"></td>
<td class="col-2"></td>
<td class="col-3 col-lg-2 text-right">
<div class="btn-group">
<a href="#" class="btn btn-sm btn-success">Edit</a>
<a href="#" class="btn btn-sm btn-danger delete-post" data-id="<%= post._id %>">Delete</a>
</div>
</td>
</tr>
<% }); %>
<% } else { %>
<tr>
<td colspan="5">There are no posts</td>
</tr>
<% } %>
终于在 public\assets\js\admin.js
我有:
$(document).ready(function(){
$('.delete-post').on('click', function(evt){
evt.preventDefault();
let postId = $(this).data('id');
if(confirm('Delete this post?')) {
$.ajax({
url: '/post/delete/' + postId,
method: 'GET',
success: function(deleteMsg){
$('tr[data-id="' + postId +'"]').fadeOut('250');
}
});
}
});
});
我知道这足以使删除操作成功,但事实并非如此。
更新:
如果我用 url: '/dashboard/post/delete/' + postId,
替换 url: '/post/delete/' + postId,
,我会得到 500 internal server error
。我在网络选项卡中看到 posts is not defined
。
我错过了什么?
我是这样做的,为了完成 运行ning 示例克隆 更新 node-cheat XPressBlog 和 运行 节点索引后跟 npm i
.
将 delete
添加到 routes/front-end/posts.js,例如:
// Delete Single Post
router.delete('/:id', postsController.deleteSinglePost);
将 deleteSinglePost
添加到 controllers/front-end/posts.js,例如:
exports.deleteSinglePost = (req, res, next) => {
const {id} = req.params;
res.send(`This will DELETE post with id : ${id}`);
};
这是在查看index.js
的基础上完成的,即:
const dashboardRoute = require("./routes/admin/dashboard");
app.use('/dashboard', dashboardRoute);
const postsRoute = require('./routes/front-end/posts');
app.use('/', postsRoute);
curl -X DELETE http://localhost:3000/100:
This will DELETE post with id : 100
我是这样解决问题的:
1) 我将 posts.findByIdAndRemove
替换为 Post.findByIdAndRemove
:
exports.deletePost = (req, res, next) => {
const postId = req.params.id;
Post.findByIdAndRemove(postId, function(err){
if (err) {
console.log('Error: ', err);
}
res.sendStatus(200);
});
}
2) 我在 jQuery 片段中用 url: '/dashboard/post/delete/' + postId,
替换了 url: '/post/delete/' + postId,
。