Mongodb 在Express中调用PUT和DELETE而不使用AJAX
在Express中调用Mongodb 在Express中调用PUT和DELETE而不使用AJAX,mongodb,express,mongoose,Mongodb,Express,Mongoose,在Express中调用PUT和DELETE请求时遇到问题 我正在使用MongoDB和Mongoose并试图创建一个包含帖子和评论的基本博客。据我所知,除了POST和GET之外,表单不会传递任何方法,为了使用PUT或DELETE,我可以在表单中创建一个值为“PUT”的隐藏输入类型。我不明白的是如何在后端使用这个值来调用PUT函数 路线 app.get('/message/:id', function(request, response) { Post.findOne({_id: request.p
PUT
和DELETE
请求时遇到问题
我正在使用MongoDB
和Mongoose
并试图创建一个包含帖子和评论的基本博客。据我所知,除了POST
和GET
之外,表单不会传递任何方法,为了使用PUT
或DELETE
,我可以在表单中创建一个值为“PUT”的隐藏输入类型。我不明白的是如何在后端使用这个值来调用PUT
函数
路线
app.get('/message/:id', function(request, response) {
Post.findOne({_id: request.params.id})
.populate('comments')
.exec(function(err, post) {
if (err) {
console.log("There was an error getting the comments.");
} else {
console.log(post);
response.render('post', { post: post });
}
});
});
app.put('/message/:id', function(request, response) {
Post.findOne({id: request.params.id}, function(err, post) {
var comment = new Comment({ name: request.body.name, text: request.body.text });
comment._post = post._id;
post.comments.push(comment);
comment.save(function(err) {
post.save(function(err) {
if (err) {
console.log('Error');
} else {
response.redirect('/');
}
});
});
});
});
标记
<form action="/message/<%= data[i]._id %>" method="post">
<label for="name">Name:</label>
<input type="text" name="name">
<label for="message">Message:</label>
<textarea cols="60" rows="10" name="message"></textarea>
<input type="hidden" name="add" value="PUT">
<input type="submit" value="Post Comment">
</form>
姓名:
信息:
提前感谢您的帮助。这不是一个完整的解决方案,它只是想进一步说明您对我的评论建议的疑问
// post route
app.post('/message', function(request, response) {
// post code
});
// put and delete
app.post('/message/:id', function(request, response) {
if (request.query.method === 'PUT') {
//put code
}
else if (request.query.method === 'DELETE') {
// delete code
}
});
put的HTML(查询字符串方法=put)
姓名:
信息:
用于删除的HTML(查询字符串方法=删除)
姓名:
信息:
帖子的HTML(无id或查询字符串)
姓名:
信息:
这不是一个完整的解决方案,它只是想进一步说明您对我的评论建议的疑问
// post route
app.post('/message', function(request, response) {
// post code
});
// put and delete
app.post('/message/:id', function(request, response) {
if (request.query.method === 'PUT') {
//put code
}
else if (request.query.method === 'DELETE') {
// delete code
}
});
put的HTML(查询字符串方法=put)
姓名:
信息:
用于删除的HTML(查询字符串方法=删除)
姓名:
信息:
帖子的HTML(无id或查询字符串)
姓名:
信息:
您可以在post表单的操作上使用查询字符串参数,如?method=put,并使用req.params或req.query读取它。通过这种方式,您可以将方法数据与表单数据分开,然后在req.query.method==='put'时调用相应的代码,以便您的post路由处理程序处理post和putHey Glenn,非常感谢您的回复。不幸的是,我是编程新手,因此对您建议的解决方案有点困惑。我想我有点不知所措,因为我甚至不确定您编写的req.query.method==='put'。谢谢你的帮助,但我想我最好多看一些教程。看看我的答案。还有一个不能使用JavaScript的原因吗?可以在post表单的操作上使用查询字符串参数,如?method=put,并使用req.params或req.query读取它。通过这种方式,您可以将方法数据与表单数据分开,然后在req.query.method==='put'时调用相应的代码,以便您的post路由处理程序处理post和putHey Glenn,非常感谢您的回复。不幸的是,我是编程新手,因此对您建议的解决方案有点困惑。我想我有点不知所措,因为我甚至不确定您编写的req.query.method==='put'。谢谢你的帮助,但我想我最好多看一些教程。看看我的答案。还有一个你不能使用JavaScript的原因吗?嘿,vbranden,非常感谢你的帮助!我所要做的就是在你写的东西的同时使用方法重写,现在一切都很好。我不知道HTML表单的“操作”部分中的“方法”实际上是一个对象,它可以保存您可以使用request.query.method提取的数据。非常酷,非常重要。再次感谢!为了澄清这一点,express将查询字符串解析为键值对。因此,该值不必是method,它可以是?icecream=POST,然后您可以在request.query.icecream中查找该方法。如果有机会,您应该仔细阅读查询字符串Hey vbranden,非常感谢您的帮助!我所要做的就是在你写的东西的同时使用方法重写,现在一切都很好。我不知道HTML表单的“操作”部分中的“方法”实际上是一个对象,它可以保存您可以使用request.query.method提取的数据。非常酷,非常重要。再次感谢!为了澄清这一点,express将查询字符串解析为键值对。因此,该值不必是method,它可以是?icecream=POST,然后您可以在request.query.icecream中查找该方法。如果有机会,您应该仔细阅读查询字符串
<form action="/message/<%= data[i]._id %>?method=DELETE" method="post">
<label for="name">Name:</label>
<input type="text" name="name">
<label for="message">Message:</label>
<textarea cols="60" rows="10" name="message"></textarea>
<input type="submit" value="DELETE Comment">
</form>
<form action="/message" method="post">
<label for="name">Name:</label>
<input type="text" name="name">
<label for="message">Message:</label>
<textarea cols="60" rows="10" name="message"></textarea>
<input type="submit" value="Post Comment">
</form>