Mongo和车把

时间:2017-12-31 14:53:42

标签: node.js mongodb express

嗨,大家好,我最近一直在学习车把,用express和mongodb创建一个应用程序,并使用把手作为模板引擎,但我的更新和删除按钮工作有一个小问题。这是我的代码和我尝试过的:

//这些是我用来更新和删除的方法。请求在邮递员中正常工作,但似乎无法弄清楚如何将它们连接到我的把手

app.put('/users/:id', (req, res) => {
  const id = req.params.id;
  console.log(id + " was hit")
  const details = { '_id': new ObjectID(id) };
  const user = { name: req.body.name, surname: req.body.surname, cellphone: req.body.cellphone};
  db.collection('users').update(details, user, (err, result) => {
    if (err) {
      res.send({'error':'An error has occurred'});
    } else {
      res.send(user);
    } 
  });
});



app.delete('/users/:id', (req, res) => {
  const id = req.params.id;
  const details = { '_id': new ObjectID(id) };
  db.collection('users').remove(details, (err, item) => {
    if (err) {
      res.send({'error':'An error has occurred'});
    } else {
      res.send('User ' + id + ' deleted!');
    } 
  });
});

在我的模板中,我有这个:

<div class="col-8">
        <table class="table">
            <thead>
                <tr>
                    <th scope="col">Name</th>
                    <th scope="col">Surname</th>
                    <th scope="col">Cellphone</th>
                    <th></th>
                    <th></th>
                </tr>
            </thead>
            {{#each users}}
            <tbody>
                <tr>
                    <td>{{name}}</td>
                    <td>{{surname}}</td>
                    <td>{{cellphone}}</td>
                     <span>
                        <a href="/users/{{_id}}" title="Delete this todo item">Delete</a>
                     </span>
                </tr>
            </tbody>
            {{/each}}
        </table>
    </div>

但是当我按下删除按钮时,我得到了ReferenceError:id未定义错误,并且还尝试将_id更改为我的把手中的id,但我没有使用我的删除功能。

1 个答案:

答案 0 :(得分:1)

您正尝试使用DELETE标记创建包含链接的<a> http请求。 您应该注意,由<a>标记创建的html链接会使浏览器发出GET http请求。

解决方案#1(推荐):

解决此问题的最佳方法是使用像axios这样的http客户端库。

以下是使用axios的示例:

标记:

<button onclick="deleteToDoItem( {{_id}} )"> Delete </button>

使用Javascript:

function deleteToDoItem(id) {
    axios.delete("/users/"+id).then(function(response) {
        console.log("Item Deleted");
    })
}

解决方案#2:

作为替代解决方案,您可以通过某种方式覆盖后端代码中的原始http请求方法来解决此问题。

检查此项目的灵感:https://github.com/expressjs/method-override

这可以让您通过将标记更改为以下内容来实现所需的结果:

<a href="/users/{{_id}}?_method=DELETE" title="Delete this todo item">Delete</a>