javascript - 如何使用 Node.js 和 MySQL 实现过滤?
问题描述
我目前正在学习如何在 Node.js 和 MySQL 后端中实现过滤、排序和分页。
我目前的解决方案是:
exports.getAll = (req, res) => {
let params = {
target_muscle: (req.query.target_muscle ? req.query.target_muscle : 'target_muscle')
}
Exercise.getAll(params, (error, result) => {
if(error)
res.status(500).send({
message: error.message
});
else
res.send(result);
})
}
在从模型调用此方法的控制器上:
Exercise.getAll = (params, result) => {
db.query("SELECT\
exercise_id,\
username AS author,\
title, target_muscle,\
sets, reps, duration,\
likes,\
video_id\
FROM exercises\
JOIN users ON exercises.author_id = users.user_id\
WHERE target_muscle=?", [params.target_muscle], (error, res) => {
if(error) {
result(error, null);
return;
}
result(null, res);
})
}
当我实际上在 GET 请求上传递了一个查询参数但当我不传递任何参数时给我一个空结果时,它工作正常。当我没有通过任何东西时,我希望它不会被过滤。
解决方案
在将条件添加到 SQL 查询的 where 部分之前,您需要验证是否有参数值。你这样做的方式,你的代码是这样查询的。
WHERE target_muscle = 'target_muscle'
推荐阅读
- node.js - 如何将数据从一条路线传输到另一条路线
- server - Tacacs GUI 上的 tac_plus.cfg 出现错误“/opt/tacacsgui/tac_plus.cfg_test:47: Unrecognized keyword 'host'”
- r - 只要电子邮件地址不正确,就禁用按钮 R Shiny
- android - DiffUtil 没有更新 RecyclerView
- html - 将 CSS 网格中的文本放置在图像上
- docker - 如何在 VSCode 中设置 dockerized 二进制文件
- c# - 如何使用日期时间字段查询 Azure Cosmos DB 中的对象
- c# - 有什么方法可以访问 Windows 登录屏幕并在 Windows10 的登录屏幕上添加 custum ui?
- javascript - 未捕获的 SyntaxError:如果在 jquery 中,则出现意外的标记
- angular - 我们如何在google road map api(sna to road)中使用100多个坐标