javascript - 无法在ejs中访问数组中的单个对象
问题描述
我正在重新渲染我的表单,出现任何错误,
// controller.js
(req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
res.render("quotes", {
form: req.body,
errors: errors.array()
});
return;
}
我能够在这样的列表中显示错误
// ejs file
<% if (locals.errors) { %>
<ul>
<% errors.forEach(error => { %>
<li><%= error.msg %></li>
<% }) %>
</ul>
<% } %>
但是我喜欢单独访问每个错误,所以我可以在无效输入下显示它们,而不是在表单底部的列表中显示它们。
下面是我最接近的解决方案,它当然不正确,但它与我一样接近。(它会根据是否存在其他错误而中断)
//controller.js
(req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
res.render("quotes", {
form: req.body,
errors: errors.array()
error1: errors.array()[0].msg,
error2: errors.array()[1].msg,
error3: errors.array()[2].msg,
});
return;
}
// ejs file
<% if (locals.errors) { %> <li> <%= error1 %></li> <% } %>
errors: [
{
value: '',
msg: 'First name must be specified',
param: 'firstName',
location: 'body'
},
{
value: '',
msg: 'Last name must be specified',
param: 'lastName',
location: 'body'
},
{
value: '',
msg: 'Please enter a valid email',
param: 'email',
location: 'body'
}
]
任何帮助,将不胜感激!
解决方案
任何帮助,将不胜感激!
好的,这是我的建议。
您需要了解哪个错误出现在哪个输入字段中。例如(如果可以的话),您可以将errors
对象(数组)更改为如下所示:
let errors = {
'firstName': {
value: '',
msg: 'First name must be specified',
location: 'body'
},
'lastName': {
value: '',
msg: 'Last name must be specified',
location: 'body'
},
'email': {
value: '',
msg: 'Please enter a valid email',
location: 'body'
}
};
所以现在你的错误有键(如果没有错误,那么let errors = {}
)。
因此,您可以向任何输入字段添加错误消息:
<% if (locals.errors && errors.firstName) { %> <div class="error"><%= errors.firstName.msg %></div> <% } %>
<input type="text" id="firstName" name="firstName"/>
<% if (locals.errors && errors.lastName) { %> <div class="error"><%= errors.lastName.msg %></div> <% } %>
<input type="text" id="lastName" name="lastName"/>
如果需要将errors
数组转换为对象,可以这样做:
let errorsObj = {};
errors.map((item) => {
const id = item.param;
delete item.param;
errorsObj[id] = item;
});
在您拥有数组的地方运行上面的代码errors
,但在渲染到页面之前。因此,页面将按照我写的方式呈现,但更改errors
为errorsObj
:
<% if (locals.errors && errorsObj.firstName) { %> <div class="error"><%= errorsObj.firstName.msg %></div> <% } %>
<input type="text" id="firstName" name="firstName"/>
推荐阅读
- android - com.android.builder.internal.aapt.v2.Aapt2Exception:Android资源编译失败
- sql - N 天的总和,不包括周末和节假日
- javascript - github页面网站上的图像加载缓慢
- angular - 如何在 ionic v 6 角度页面之间传递数据
- virtual-machine - 为什么 QEMU 使用 JIT 编译?
- inform7 - 从 Inform 7 中的角色获得简单回复
- flutter - 如何允许用户点击标题以在 ExpansionPanel 上打开
- python-3.x - pyinstaller + PySide6 -- 警告:文件已经存在但不应该:
- perl - Perl - 使用 .html 文件时出现编码错误
- python - Python Selenium 无法从循环中获取结果