我在Express中调用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>
提前感谢您的帮助。
答案 0 :(得分:0)
这不是一个完整的解决方案,只是为了扩展您对我的评论建议的问题。
// 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)
<form action="/message/<%= data[i]._id %>?method=PUT" 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="PUT Comment">
</form>
用于删除的HTML(查询字符串方法= DELETE)
<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>
帖子的HTML(无ID或查询字符串)
<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>