EJS嵌套变量使用问题:如何在if条件中使用EJS变量?
EJS结合express-validator显示字段错误的正确姿势
先搞定服务器端的传参
服务器里得先把express-validator的验证结果正确传给EJS模板,示例代码:
const { validationResult } = require('express-validator'); app.post('/your-form-path', [ // 这里写你的验证规则,比如 check('card').isLength({ min: 5 }).withMessage('卡号太短') ], (req, res) => { const errors = validationResult(req); if (!errors.isEmpty()) { // 把错误数组和目标字段名idName一起传给模板 return res.render('your-template', { errors: errors.array(), idName: 'card' }); } // 验证通过后的业务逻辑 });
EJS模板里的正确写法
别搞客户端脚本那套,直接在EJS的服务器端脚本块里处理变量,再做判断:
<% // 从错误数组里筛选出当前idName对应的错误 const errCard = errors.find(err => err.param === idName); %> <% if (errCard) { %> <div class="error"><%= errCard.msg %></div> <% } %>
为啥之前的写法不行?
- 直接嵌套写法:如果是在EJS标签里错误嵌套EJS语法,解析器会直接报错,必须在EJS的
<% %>脚本块里先处理变量,再做条件判断。 - 用
<script>定义变量:<script>里的代码是客户端浏览器运行的,而EJS的if判断是服务器端渲染模板时执行的,两者完全不在一个环境,服务器根本看不到客户端定义的errCard,自然会提示未定义。
内容的提问来源于stack exchange,提问作者marco
相关产品推荐
相关产品推荐

