【问题标题】:sequelize.js - Find by id and return resultsequelize.js - 按 id 查找并返回结果
【发布时间】:2016-03-20 00:37:33
【问题描述】:

我有一个函数,

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

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    现在是 2020 年,asyncawait 变得越来越流行。您可以将代码更改为:

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

    恕我直言,上面的代码更具可读性。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        您尝试执行的操作是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);
        }); 
        

        【讨论】:

        【解决方案4】:

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

        提示:尝试只返回 devicedevice.id

        PS。如果你想根据 id 进行搜索,应该去你模型的findById() 函数。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-12-08
          • 2014-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多