使用Mongoose使用EJS发送DELETE请求

时间:2016-09-24 02:39:19

标签: javascript node.js mongodb express mongoose

所以我已经用节点创建了一个Restful API,一切正常,但我正在尝试将EJS添加到它,所以我可以使用HTML和CSS,我实现了GET和POST就好了,但我正在使用DELETE。

这是我的路由器中的代码删除

listRouter.delete('/:id', 
    function(req, res) {
        req.list = list;
        req.list.remove(function(err){
            if (err)
                res.status(500).send(err);
            else
                res.redirect('/')
        });
});

这是我的EJS删除

<form method="DELETE" action="/:id">
      <button type="submit">Delete</button>
</form>

这是我按下按钮时收到的错误

{
message: "Cast to ObjectId failed for value ":id" at path "_id"",
name: "CastError",
kind: "ObjectId",
value: ":id",
path: "_id"
}

虽然为JSON修改了同样精确的代码,但我不知道它的EJS或我的Javascript。

由于

2 个答案:

答案 0 :(得分:1)

我认为html5只支持方法表单属性

中的postget

然而,在我的情况下,如果我不使用表单提交,这里的例子

  

html或前端的示例

<a class="btn btn-raised btn-danger" href="/admin/dashboard/detele/<%= data.userId %>">Delete</a></td> 
<!-- The href needs to point at a link where data.userId is shown. Hence you need the = after <% for ejs to show the variable. -->
  

在url delete的app.js中

app.get('/admin/dashboard/detele/:id', users.deleteUser);
  

在express users.js

exports.deleteUser = function(req, res) {

    users.findOneAndRemove({
        userId: req.params.id
    }, function(err, user) {

        if (err) throw err;

        console.log("Success");

    });

    res.redirect('/admin/dashboard');

}
  不要忘记为猫鼬创建mongo模型

var skema = new mongo.Schema({

    name: String,
    email: String,
    password: String,
    date: {
        type: Date,
        default: Date.now
    },
    admin: Boolean
});


var users = mongo.model('accounts', skema);

我在这里使用EJS,希望它可以帮助你

答案 1 :(得分:0)

放弃使用 method-override 可以解决问题

我使用了不同的网址来解决这个问题。

<form action="/quake/forum/update/<%= post._id %>?_method=put" method="post">

<form action="/quake/forum/delete/<%= post._id %>?_method=delete" method="post" class="d-inline">

和路由器

主路由器

app.use('/quake/forum',forumRouter); //this is for just making sure explaination clear

子路由器(forumRouter)

router.post('/delete/:id', function (req, res) {

router.post('/update/:id', function (req, res) {