首页 > 解决方案 > 创建一个错误数组并通过快速闪存显示它们

问题描述

我正在尝试创建一个数组,在其中存储并加入来自字段验证的错误。我想要做的是向用户显示错误,以便他们可以在更新用户配置文件之前修复这些字段。

我现在拥有的代码如下,我发现的是 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')
  }
})

标签: arraysnode.jsvalidationexpressmongoose

解决方案


当我尝试通过消息检查输出消息时,它输出一个空数组 []

发生这种情况是因为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')
    }
  })

})

推荐阅读