创建一个错误数组并通过快速闪存显示它们

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')
    
  )

)

【讨论】:

以上是关于创建一个错误数组并通过快速闪存显示它们的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter 闪存数据

arduino 闪存阵列

将外部 xml 文件导入闪存

闪存 AS3 的动态阵列

闪存搜索字符串

重定向后烧瓶闪存不起作用