sequelize.js - Find by id and return result

It's 2020, async & await are becoming more popular. You can change your code to:

const findUserDevice = async function (userDeviceId) {
  const device = await db.DeviceUser.findOne({
    where: {
      id: userDeviceId
    }
  });
  if (device === null) {
    return 'device not found';
  }
  return device.dataValues;
};

 (async () => {
    // ...
    const UserDevice = await findUserDevice(req.body.deviceUserId);
    console.log(UserDevice);
    // ...
  })()

IMHO, the code above is way more readable.


If you are getting undefined instead of 'not find' on the console, it means your function is returning a value. The problem might be dataValues is actually undefined. You need to check for the content of device.

Hint: Try returning just device or device.id

PS. If you want to do the search based on id, should go for findById() function of your model.

var device = db.DeviceUser.findById(userDeviceId).then(function(device) {
  if (!device) {
    return 'not find';
  }
  return device.dataValues;
});

The operation you are trying to do is async, which means that you need to use a callback. Since sequelize is build on top of Promises, you should actually write your code like this :

var findUserDevice = function(userDeviceId){
    // return the promise itself
    return db.DeviceUser.find({
        where: {
           id: userDeviceId
        }
     }).then(function(device) {
        if (!device) {
            return 'not find';
        }
        return device.dataValues;
     });
};

And later use it like :

findUserDevice(req.body.deviceUserId).then( function(UserDevice) {
   console.log(UserDevice);
}); 

This function received params id, this worker for me:

const  { customer }  = require('../models');

const get = async function(req, res){
    let id = req.params.id;

    [err, singleCustomer] = await to(customer.findByPk(id, { raw : true }));

    return ReS(res, { message :'Obtener cliente: : ', data : JSON.stringify(singleCustomer) });
}