web-dev-qa-db-ja.com

sequelize.js-IDで検索して結果を返す

私には機能があります

var findUserDevice = function(userDeviceId){

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

しかし、この関数は何も返しません...

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

実行しようとしている操作はasyncです。これは、コールバックを使用する必要があることを意味します。 sequelizeはPromiseの上に構築されるため、実際に次のようにコードを記述する必要があります。

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

後でそれを次のように使用します:

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

コンソールで「見つかりません」ではなく未定義になっている場合は、関数が値を返していることを意味します。問題は、dataValuesが実際には定義されていないことです。 deviceの内容を確認する必要があります。

ヒント:deviceまたは_device.id_のみを返すようにしてください

PS。 idに基づいて検索を実行する場合は、モデルのfindById()関数を使用する必要があります。

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

2019年、asyncawaitはますます人気が高まっています。コードを次のように変更できます

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)
  // ...
})()

私見、上記のコードはより読みやすいです。

3
Tyler Long

この関数はparams idを受け取りました。このワーカーは私のために:

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