如何通过WHERE子句将MySQL数据在Node.js的EJS模板中展示
Node.js + MySQL + EJS 结合WHERE子句展示数据
先修正你当前的代码问题
你的Node.js路由逻辑没问题,但EJS模板取值有误:MySQL的db.query返回的结果是数组格式(哪怕只查到一条数据),直接用data.id会取不到值,得通过数组下标获取第一条数据的属性。
修正后的Node.js路由(路由无需改动,仅调整EJS)
router.get("/users", (req, res) => { db.query('SELECT * FROM users WHERE id = 2', function (err, result) { if (err) throw err; res.render('users', {data: result}); }); })
修正后的EJS模板
<!-- 取数组第一条数据的id --> <input type="text" value="<%= data[0].id %>"> <!-- 同理展示用户名、邮箱 --> <input type="text" value="<%= data[0].username %>"> <input type="text" value="<%= data[0].email %>">
扩展:动态使用WHERE子句筛选数据
实际开发中很少硬编码条件,通常从请求参数获取筛选条件,同时要注意SQL注入防护,必须用参数化查询(禁止直接拼接字符串)。
1. 按ID动态筛选(URL路径参数)
比如访问 /users/3 查看ID为3的用户:
router.get("/users/:id", (req, res) => { // 从URL路径获取id const userId = req.params.id; // 使用?作为占位符,第二个参数传数组形式的参数值 db.query('SELECT * FROM users WHERE id = ?', [userId], function (err, result) { if (err) throw err; res.render('users', {data: result}); }); })
2. 按用户名/邮箱筛选(URL查询参数)
比如访问 /users?username=Alice 或 /users?email=alice@example.com:
router.get("/users", (req, res) => { let query = 'SELECT * FROM users'; let params = []; // 根据请求参数拼接WHERE条件 if (req.query.username) { query += ' WHERE username = ?'; params.push(req.query.username); } else if (req.query.email) { query += ' WHERE email = ?'; params.push(req.query.email); } db.query(query, params, function (err, result) { if (err) throw err; res.render('users', {data: result}); }); })
EJS模板处理多条结果
如果筛选结果是多条数据,用EJS循环遍历展示:
<% if (data.length > 0) { %> <% data.forEach(user => { %> <div class="user-item"> <input type="text" value="<%= user.id %>"> <input type="text" value="<%= user.username %>"> <input type="text" value="<%= user.email %>"> </div> <% }) %> <% } else { %> <p>没有找到匹配的用户</p> <% } %>
内容的提问来源于stack exchange,提问作者Rika San
相关产品推荐
相关产品推荐

