【发布时间】: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