【问题标题】:req.query resulting in empty objectreq.query 导致空对象
【发布时间】:2019-06-06 02:19:15
【问题描述】:

req.query 不断产生一个空对象。

我被重新路由到一个显示 BAD_NULL_ER 的页面,因为名称不能为空(因为我以这种方式设置了架构),但是当我刷新时,我尝试插入的项目实际上被添加到数据库中。

这是请求

    let req = new XMLHttpRequest();

    let param = `name=${form.elements.name.value}&reps=${form.elements.reps.value}&weight=${form.elements.weight.value}&date=${form.elements.date.value}&lbs=${form.elements.lbs.value}`;

    req.open("POST", "/?" + param, true);
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

    req.send("/?" + param);

这是路线

app.post('/', function (req, res, next) {
  console.log(req.query);
  var sql = "INSERT INTO workouts(`name`, `reps`, `weight`, `date`, `lbs`) VALUES(?, ?, ?, ?, ?)";
  connection.query(sql,
    [req.query.name, req.query.reps, req.query.weight, req.query.date, req.query.lbs],
    (err, rows, fields) => {
      if (err) {
        console.log(err);
        next(err);
        return;
      }
      res.send(JSON.stringify(rows));
    });
});

【问题讨论】:

  • 您是否在 express 服务器中使用 body-parser pkg ?
  • 是的,我正在使用 body-parser
  • @Milad 如果您注意到控制台,整个 req.query 是空的,因此难怪 MySQL 发生错误。还是不是对应的日志语句?
  • 是的。我注意到。这就是我要解决的问题。
  • 您可能会收到来自浏览器的重复请求,其中一个为空(无查询)。你应该用if (!req.query) return; 来控制你的逻辑。此外,此代码容易受到 sql-injection 的影响,您应该清理您的输入!

标签: javascript node.js express


【解决方案1】:

尝试将query-string 添加到您的应用中。这是使用它的最简单方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多