如何在节点js中从服务到控制器返回两个以上的值

时间:2019-05-16 07:30:05

标签: node.js express sequelize.js

我有一个controller / user.js文件,可以使用service / user.js中的函数获取数据
从服务中的getUsers函数,我不能返回超过1的值。例如,我想返回return{User,pages}。但是,我在返回return{User,pages}
时出错  以下是我在使用return{User,pages}

时遇到的错误
  

userService.getUsers(...)。则不是函数

controller / user.js

function getUsers(req, res){
    userService.getUsers({
         page_no:req.body.page_no,
         previous:req.body.previous
    }  
    )
    .then(data => res.send(data));
};

service / user.js

const getUsers = function (data) { 
    let limit = 10;   // number of records per page
    let offset = 0;
    let page = data.page_no;      // page number
     data = Users.findAll({where: {
        DeletedAt: {
          $eq: null
        }
    }})
    const pages = Math.ceil(data.count / limit);
        offset = limit * (page - 1);
    const User =  Users.findAll({
        attributes: ['id', 'first_name', 'last_name', 'role_id','login','is_active'],
        limit: limit,
        order: [
                ['createdAt', 'DESC']
            ],
        offset: offset,
        $sort: { id: 1 },
        where: {
            DeletedAt: {
              $eq: null
            }
        }
    })
    return User
    };

1 个答案:

答案 0 :(得分:1)

看起来您正在使用一些返回Promise的ORM。

当您仅返回User时,User的类型是Promise(可能是因为您没有收到错误),所以该函数将返回一个promise,您可以调用{ {1}}方法。

但是,当您返回.then时,您没有返回承诺,但是{ User, pages }和对象没有Object方法,这就是为什么您会得到错误的原因。

返回对象then时,可以更改代码以提取promise并在其上调用then方法:

{ User, pages }