Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Unexpected error while trying to store user with sequelize

I’m relative new to node.js and sequelize and promises in js. But I don’t understand why my program is giving me back my error message even when the user is created successfully.

My sequelize model, reading the docs and some answers here I added the hook to encrypt the password:

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;

And this is the middleware that I use for storing the user

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

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;
      })
    )
  })

}

My middleware checks if the Patient (in this case) exists, then checks if the patient has an user, and if not it creates it. But the response that I get is ‘Error while creating user’, but if I check the database the user has been created successfully and I don’t know why, Any help is appreciated. Thanks in advance

>Solution :

Looks like the problem lies within the then clause. Instead of using res for both the User.create response and HTTP response, you should probably change it to something else, for example:

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

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading