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

时间:2015-11-18 23:52:23

标签: mongodb express mongoose

我在Express中调用PUTDELETE请求时遇到问题。

我正在使用MongoDBMongoose,我正在尝试创建一个包含帖子和评论的基本博客。根据我的理解,表单不会传递POSTGET以外的任何方法,并且为了使用PUTDELETE,我可以创建一个隐藏的输入类型价值" 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>

提前感谢您的帮助。

1 个答案:

答案 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>