web-dev-qa-db-fra.com

sequelize.js - Recherche par id et résultat retourné

J'ai une fonction,

var findUserDevice = function(userDeviceId){

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

mais cette fonction ne retourne rien ...

var UserDevice = findUserDevice(req.body.deviceUserId);
console.log(UserDevice);// undefined
11
Vova Mukovozov

L'opération que vous essayez d'effectuer est async, ce qui signifie que vous devez utiliser un rappel. Puisque sequelize est construit au-dessus de Promises, vous devriez écrire votre code comme suit:

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

Et plus tard, utilisez-le comme:

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

Si vous obtenez non défini au lieu de «introuvable» sur la console, cela signifie que votre fonction renvoie une valeur. Le problème pourrait être que dataValues ​​est en réalité non définie. Vous devez vérifier le contenu de device.

Astuce: essayez de renvoyer uniquement device ou device.id

PS Si vous voulez faire la recherche basée sur l'id, vous devriez aller pour la fonction findById() de votre modèle.

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

C'est 2019, async & await deviennent de plus en plus populaires Vous pouvez changer votre code pour

const findUserDevice = async function (userDeviceId) {
  const device = await db.DeviceUser.find({
    where: {
      id: userDeviceId
    }
  })
  if (!device) {
    return 'not find'
  }
  return device.dataValues
}

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

IMHO, le code ci-dessus est beaucoup plus lisible.

2
Tyler Long

Cette fonction a reçu params id, ce travailleur pour moi:

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