我有一个页面在对整个列表(测试中的 234 个对象)发出 REST 请求之前使用 25 个对象的列表引导自身。
因为我通过两个不同的入口点访问同一个查询,所以我抽象成一个函数:
ideaListTrailingWeek: function index(req, limit){
var user = req.user
var Idea = req.db.models.dili_forum;
var now = new Date()
// set now to be 100 days ago because my data set is old
now = dateHelper.addDays(now, -100)
var weekAgo = dateHelper.addDays(now, -7)
var promise = _.isUndefined(limit) ?
Idea.qFind({ date_added: orm.gte(weekAgo) },{autoFetchLimit: 2}, ['-id']) :
Idea.qFind({ date_added: orm.gte(weekAgo) },{autoFetchLimit: 2}, limit, ['-id'])
return promise.then(function (ideas) {
var ideasFinal = _.chain(ideas)
.map(ideaTx.lightIdea)
.value()
return ideasFinal
})
}
这一切正常(选择正确的承诺并执行它)。模型是
Idea -many-> IdeaIndustry -one-> Industry
Idea -one-> User -one-> Member
如果我首先使用“限制”引导页面的调用访问,则页面加载正常。模型加载到适当的深度。但是随后的休息调用通过(选择没有限制的承诺),并且没有'不返回任何嵌套对象(不是第一级用户,也不是更深的对象)。
如果我重置节点服务器并通过 REST 调用访问(选择没有限制的承诺),则整个数据集都会以适当的深度加载。
我已经用 hasOne 关系设置了我的所有关系,因为在以前的项目中以这种方式使用它感到很舒服。也就是说,一旦我正常工作,我计划调查许多关系。这个项目有一个由离岸承包商建造的遗留数据库,名字不好,标签错误。楷模:
var Idea = db.define('dili_forum', {
id : Number,
title : String,
content : String,
user_id : Number,
}, {
autoFetch: true
}) ;
var IdeaIndustry = db.define('teaser_industries', {
id: Number,
teaser_id: Number,
sub_industry_id : Number
}, {
autoFetch: true
}) ;
var Industry = db.define('mas_flattened_industry', {
industry_id: Number,
industry_name : String,
parent_industry_id: String,
parent_industry_name: String,
category_name: String
}, {
id: 'industry_id',
autoFetch: true
}) ;
如果有帮助,我可以发布用户模型链。以下是如何设置关系:
Idea.hasOne('user', User, {
reverse: 'ideas'
, field: 'user_id'
, autoFetch: true
})
IdeaTicker.hasOne('idea', Idea, {
reverse: 'tickers'
, field: 'teaser_id'
, autoFetch: true
})
IdeaIndustry.hasOne('idea', Idea, {
reverse: 'industries'
, field: 'teaser_id'
, autoFetch: true
})
IdeaIndustry.hasOne('industry', Industry, {
field: 'sub_industry_id'
, autoFetch: true
})
有什么想法吗?