knex与相关的回收集合基础

时间:2017-03-13 16:57:36

标签: node.js knex.js bookshelf.js

在NodeJS / Knex / Bookshelf应用程序中,我正在帮助重写,我在withRelated模型上对消息和兴趣进行User查询:

  return User.query({where: {id: user.id}})
      .fetch({withRelated: ['messages', 'interests']}).then(function(user) {
        return {
          id: user.id,
          prop1: user.related('messages'),
          prop2: user.related('interests'),
        };
      });

但它正在返回CollectionBases:

{ id: 1,
  messages: 
    CollectionBase {
     model: { ... }
    }
   }
  interests:
    CollectionBase {
     model: { ... }
    }
  }

但我需要它来返回实际的数据对象数组:

{ id: 4068,
  messages: 
   [ { id: 2,
       title: 'Customer',
       _pivot_user_id: '1',
       _pivot_user_role_id: '2' } ],
  interests: 
   [ { id: 86,
       name: 'interest1',
       _pivot_user_id: '4068',
       _pivot_org_id: '86' } ] }

如果我尝试JSON'ify它,我会收到错误:

  

user.toJSON不是函数

var user = {
  id: user.id,
  prop1: user.related('messages'),
  prop2: user.related('interests'),
};
return user.toJSON();

如何返回User的每个相关对象的对象数组?

1 个答案:

答案 0 :(得分:1)

而不是:

return user.toJSON();

尝试做:

return JSON.stringify(user);

如果你真的想要JSON,或者这个:

var user = {
  id: user.id,
  prop1: user.related('messages').toJSON(),
  prop2: user.related('interests').toJSON(),
};

如果你想要一个在序列化为JSON之前看起来像的JS对象。