【问题标题】:Express JS - deleting entry from mysqlExpress JS - 从 mysql 中删除条目
【发布时间】:2013-08-27 17:04:45
【问题描述】:

我正在使用 Express.js 构建一个小型应用程序。我已经成功实现了允许我向数据库添加新条目的功能。

当用户单击按钮时,我目前正在尝试从 mysql 数据库中删除一个条目。这是被执行的代码:

client.query('DELETE FROM humans WHERE id= ?', [req.params.id], function(err, result) {
        if (err) {
            throw err;
        }

        res.redirect('/humans');

我知道代码可以正确执行,因为我被重定向到正确的页面。不过,我的条目仍在数据库中。

【问题讨论】:

  • 明显的问题是 id 被传递设置/正确?
  • @WiredPrairie - 是的;我有一个隐藏的输入字段,它的 id 值和 name 属性设置为 id,这样当我发布该表单时,它就会被传递;当我检查页面时它是可见的并且值是正确的
  • 看起来我的问题的答案是“有点”,因为你接受了什么。 :)

标签: javascript mysql node.js express


【解决方案1】:

从 cmets 推断出您的问题,我猜您是使用 POST 请求从表单发送 id。在 req.body 中查找 post 参数(如果您使用的是 express.bodyParser 中间件)。因此:

client.query('DELETE FROM humans WHERE id= ?', [req.body.id], function(err, result) {
  if (err) {
      throw err;
  }

  res.redirect('/humans');
});

如果您要发送 GET 请求,则参数将在 req.query 中找到。

【讨论】:

  • 现在完美运行!根据您刚才的解释,我知道每当我发送 POST 请求时,我都无法再使用 req.params 访问参数。我一定会使用 req.body.?
  • 不,您永远无法通过 req.params 访问表单数据。我们通常以 url 编码字符串的形式发送表单数据,要么在正文中(对于 POST),要么在查询字符串中(对于 GET)。考虑/foo/bar/foo?value=bar。第一个请求可以通过类似/foo/:value in express 的路由处理,参数将在req.params.value 中找到。然而,第二个请求发送查询字符串中的值,因此该值在 req.query.value 中找到。
  • (当然,同样的推理也适用于 POST 和 req.body,但由于正文不是 url 的一部分,因此很难以这种短格式演示)
  • 我现在明白了。非常感谢您的解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 2013-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-12
相关资源
最近更新 更多