sequelize.js - 按id和返回结果查找

时间:2015-12-14 13:45:32

标签: node.js sequelize.js

我有一个功能,

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

4 个答案:

答案 0 :(得分:8)

您尝试执行的操作是async,这意味着您需要使用回调。由于sequelize是在Promises之上构建的,所以你应该像这样编写代码:

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

答案 1 :(得分:6)

如果您未定义而未找到'在控制台上,这意味着您的函数正在返回一个值。问题可能是dataValues实际上是未定义的。您需要检查device

的内容

提示:请尝试仅返回devicedevice.id

PS。如果您想根据ID进行搜索,请选择模型的findById()功能。

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

答案 2 :(得分:2)

现在是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 :(得分:0)

此函数收到参数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) });
}