最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

在Mongoose模型保存后向用户显示Flash错误消息

运维笔记admin13浏览0评论

在Mongoose模型保存后向用户显示Flash错误消息

在Mongoose模型保存后向用户显示Flash错误消息

我有一个页面index.js,它有一个添加用户的表单,旁边是数据库中的用户列表。

/routes/index.就是

var express = require('express');
var router = express.Router();
var User = require('../schemas/user');

router.post('/create', function(req, res, next) {
  var user = new User({
    username: req.body.username,
    email: req.body.email,
    password: req.body.password
  });
  user.save(function(err) {
    if (err) {
      console.log('user save error ' + err.errmsg);
      return res.json(err.errmsg);
    }
    res.redirect('/');
  });
});

/* GET home page. */
router.get('/', function(req, res, next) {
  User.find(function (err, users) {
    if (err) {
      console.log('get error ' + err);
      //return res.sendStatus(500);
    }
    res.render(
      'index',
      {
        userList : users
      }
    );
  });
});

module.exports = router;

/schemas/user.就是

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var userSchema = new Schema({
  username: { type: String, required: true, unique: true },
  email: { type: String, required: true, unique: true },
  password: { type: String, required: true },
  group: String,
  created_at: Date,
  updated_at: Date
});

var User = mongoose.model(
  'User',
  userSchema
);

module.exports = User;

这是我的观点:

/views/index.普工

extends layout

block content
  h1= title
  p Welcome to #{title}

  .container
    .row
      .col-sm
        h1 Create User
        form(
          method='POST'
          action='/create'
        )
          .form-group
            label(for='username') Username:
            input#username.form-control(
              type='text',
              placeholder='Enter username...',
              name='username'
            )
            if usernameError
              p.error= usernameError
          .form-group
            label(for='password') Password:
            input#password.form-control(
              type='password',
              placeholder='Enter password...',
              name='password'
            )
            if passwordError
              p.error= passwordError
          .form-group
            label(for='email') Email:
            input#email.form-control(
              type='email',
              placeholder='Enter email...',
              name='email'
            )
            if emailError
              p.error= emailError
          button.btn.btn-primary(
            type='submit',
          ) Submit
      .col-sm
        h2 User List
        ul
          each user in userList
            li= user.username

如你所见,我的index.pug文件中有一些条件。我想要做的是如果发生错误我想根据错误类型(即已经使用的用户名或密码太短)将消息分配给变量,并将该变量传递给我的pug视图。如果设置了适当的变量,视图将呈现消息。有人可以帮帮我吗?我大部分都在努力解决这个事实,即我还必须渲染用户列表,如果我试图找到错误捕获部分帖子节点中的用户抱怨已经设置的头文件,即如果我有我的router.post函数像这样:

router.post('/create', function(req, res, next) {
  var user = new User({
    username: req.body.username,
    email: req.body.email,
    password: req.body.password
  });
  user.save(function(err) {
    if (err) {
      console.log('user save error ' + err.errmsg);
      User.find(function (err2, users) {
        if (err2) {
          console.log('get error ' + err2);
          //return res.sendStatus(500);
        }
        res.render(
          'index',
          {
            userList : users,
            usernameError: err.errmsg
          }
        );
      });
    }
    res.redirect('/');
  });
});

然后我希望在我的视图中看到填充usernameError消息,但是我从节点服务器收到错误:

user save error E11000 duplicate key error collection: test.users index: username_1 dup key: { : "John" }
POST /create 302 71.995 ms - 46
Error: Can't set headers after they are sent.
回答如下:
 username: { type: String, required: true, unique: true },

这是因为独特的真实。

错误:发送后无法设置标头。

错误,因为您没有返回错误。每当发生错误时,只需返回

 if (err) return next(err)

如果您正在使用快速集中式错误处理程序检查app.js.的最后一行。下一个(错误)的所有错误都会在这里

app.use(function(err, req, res, next) {
    console.error( err);
..............
});
发布评论

评论列表(0)

  1. 暂无评论