【问题标题】:Sending a DELETE request with EJS using Mongoose使用 Mongoose 使用 EJS 发送 DELETE 请求
【发布时间】:2016-09-24 02:39:18
【问题描述】:

所以我已经用 node 制作了一个 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


    【解决方案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. -->
    

    在 app.js 中删除 url

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

    在快速 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,希望对你有帮助

    【讨论】:

    • 只是一个小改动,deleteOne(...) 怎么用,findOneAndRemove(...) 被弃用了。
    • 不要使用锚标签来发起请求。锚点标签将始终被机器人和爬虫点击,您不希望机器人从您的网站中删除内容。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 2011-07-07
      相关资源
      最近更新 更多