使用 Mongoose 通过 EJS 发送 DELETE 请求

问题描述 投票:0回答:3

所以我已经用节点创建了一个 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。

谢谢

javascript node.js mongodb express mongoose
3个回答
3
投票

我认为html5只支持方法形式属性中的

post
get

但是,就我而言,如果我不使用表单提交,这里是示例

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

在app.js中删除url

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');

}

不要忘记为 mongoose 创建 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
投票

放弃使用方法覆盖可以是解决方案

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

<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) {

0
投票

通过 HTML 或 ejs 或其他 Views 引擎,您只能发送 POSTGET 请求。 然而,有一个 NPM 包名称 Method-override

npm i method-override;

现在在 App.js 或 inde.js 文件中需要它。 并使用应用程序方法。

var methodOverride = require('method-override');

app.use(methodOverride('_method'));

并写下

<form method='POST' action="link?_method=DELETE>
© www.soinside.com 2019 - 2024. All rights reserved.