创建一个错误数组并通过快速闪存显示它们
Posted
技术标签:
【中文标题】创建一个错误数组并通过快速闪存显示它们【英文标题】:Creating an errors array and display them through express flash 【发布时间】:2019-01-10 09:08:59 【问题描述】:我正在尝试创建一个数组,用于存储和加入来自字段验证的错误。我想要做的是向用户显示错误,以便他们可以在更新用户配置文件之前修复这些字段。
我现在拥有的代码如下,我发现的是console.log,其中message.push(err.messages)
。但是,当我尝试通过消息检查输出消息时,它会输出一个空数组 []
const express = require("express"),
router = express.Router(),
validator = require('validator'),
middleware = require("../middleware/index"),
User = require("../models/user");
...
...
...
router.put('/', (req, res) =>
var messages = [];
var updateUser =
username: req.body.username,
email: req.body.email
User.findOneAndUpdate(
handle: req.user.handle
, updateUser, (err, user) =>
if (err)
messages.push(err.message);
else
user.save();
)
if (messages && messages.length > 0)
if (messages.length = 1)
var errors = messages.toString()
else
var errors = messages.join(' and ')
console.log(errors)
req.flash('error', errors)
res.redirect('/profile/edit')
else
console.log(messages)
req.flash('success', 'Your profile has been updated!')
res.redirect('/profile')
)
【问题讨论】:
【参考方案1】:当我尝试通过消息检查输出消息时,它输出一个空数组 []
这是由于node
的异步性质而发生的。 messages
甚至会在 User.findOneAndUpdate()
完成之前被记录。
要在 db 调用后按顺序闪烁消息,您需要将其放在回调中。
改变它会导致,
router.put('/', (req, res) =>
User.findOneAndUpdate(
handle: req.user.handle
,
username: req.body.username,
email: req.body.email
, (err, user) =>
var messages = [];
if (err)
messages.push(err.message);
else
user.save();
var errors;
if (messages && messages.length > 0)
if (messages.length = 1)
errors = messages.toString()
else
errors = messages.join(' and ')
console.log(errors)
req.flash('error', errors)
res.redirect('/profile/edit')
else
console.log(messages)
req.flash('success', 'Your profile has been updated!')
res.redirect('/profile')
)
)
【讨论】:
以上是关于创建一个错误数组并通过快速闪存显示它们的主要内容,如果未能解决你的问题,请参考以下文章