【问题标题】:Unexpected error while trying to store user with sequelize尝试使用 sequelize 存储用户时出现意外错误
【发布时间】:2021-12-28 06:36:17
【问题描述】:

我对 node.js 和 js 中的 sequelize 和 promises 比较陌生。但是我不明白为什么我的程序即使成功创建了用户也会给我返回错误消息。

我的续集模型,在这里阅读文档和一些答案我添加了加密密码的钩子:

const Sequelize = require('sequelize');
const bcrypt = require('bcrypt');

const db = require('../util/config');

const User = db.define('user', {
  id: {
    type: Sequelize.INTEGER,
    autoIncrement: true,
    allowNull: false,
    primaryKey: true
  },
  userName: {
    type: Sequelize.STRING(250),
    allowNull: false
  },
  password: {
    type: Sequelize.STRING,
    allowNull: false,
  },
  type: {
    type: Sequelize.INTEGER,
    allowNull: false
  }
},
  {
    hooks: {
      beforeCreate: async (user) => {
        const hashedPassword = await bcrypt.hash(user.password, 8);
        user.password = hashedPassword;
      }
    }
  }
);
module.exports = User;

这是我用来存储用户的中间件

const User = require('../models/user');
const Patient = require('../models/patient');
const bcrypt = require('bcrypt');

exports.newUser = (req, res, next) => {
  const errors = validationResult(req);
  console.log('REQUEST', req.body);
  if (errors.isEmpty()) {
    checkPerson(req.body).then((existPerson) => {
      if (existPerson) {
        checkUser(req.body).then((existUser) => {
          if (!existUser) {
            User.create(req.body)
              .then((res) => {
                res.status(201).json({ // 201 = OK, pero creado un recurso
                  message: 'Saved successfully',
                  data: {
                    generatedId: res.dataValues.id,
                    patientCreated: res.dataValues
                  }
                })
              })
              .catch((error) => {
                res.status(400).json({
                  message: 'Error while creating user',
                  DBError: error
                })
              });
          } else {
            res.status(200).json({
              message: 'The person already has an user, please login'
            })
          }
        })
      } else {
        res.status(200).json({
          message: 'No person found with that id',
        })
      }
    })
  } else {
    res.status(502).json({
      message: 'Data validation error',
      validationErrors: errors.array()
    })
  }
}

function checkPerson(payload) {
  // console.log('checkPerson payload', payload)
  const userType = +payload.type;
  switch (userType) {
    case 1: // PATIENT
      return new Promise(resolve => {
        resolve(
          Patient.findOne({
            where: {
              id: payload.patientId
            }
          }).then(user => { return user ? true : false })
        )
      })
  }
}

function checkUser(payload) {
  return new Promise(resolve => {
    resolve(
      User.findOne({
        where: {
          patientId: payload.patientId,
        }
      }).then((user) => {
        return user ? true : false;
      })
    )
  })

}

我的中间件检查患者(在这种情况下)是否存在,然后检查患者是否有用户,如果没有,它会创建它。但是我得到的响应是“创建用户时出错”,但是如果我检查数据库,用户已成功创建,我不知道为什么,感谢任何帮助。提前致谢

【问题讨论】:

    标签: javascript node.js sequelize.js


    【解决方案1】:

    看起来问题出在then 子句中。而不是对User.create 响应和 HTTP 响应都使用res,您应该将其更改为其他内容,例如:

    .then((createResponse) => {
        res.status(201).json({ // 201 = OK, pero creado un recurso
            message: 'Saved successfully',
            data: {
                generatedId: createResponse.dataValues.id,
                patientCreated: createResponse.dataValues
            }
        })
    })
    

    【讨论】:

      猜你喜欢
      • 2021-06-16
      • 2023-03-15
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      • 2011-05-08
      • 2021-02-15
      • 2022-08-08
      • 2022-06-14
      相关资源
      最近更新 更多