Mongodb 在Express中调用PUT和DELETE而不使用AJAX

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

在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>

姓名:
信息:

提前感谢您的帮助。

这不是一个完整的解决方案,它只是想进一步说明您对我的评论建议的疑问

// 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>