gpt4 book ai didi

javascript - 如何在与 Sails 0.10.x 的一对多关系中引用关联模型

转载 作者:行者123 更新时间:2023-11-30 17:24:14 24 4
gpt4 key购买 nike

我正在使用 Sails.js 版本 0.10.x,并且我刚刚开始尝试它的 associactions 内容。

在我的场景中,我有一个拥有许多文档的用户。

所以在 /api/models/User.js 我有:

module.exports = {
// snipped out bcrypt stuff etc
attributes: {
email: {
type: 'string',
unique: true,
index: true,
required: true
},
documents: {
collection: 'document',
via: 'owner'
},
}
};

/api/models/Document.js 我有:

module.exports = {
attributes: {
name: 'string',
owner: {
model: 'user'
}
}
};

在我的 DocumentController 中,我有以下内容:

fileData = {
name: file.name,
owner: req.user
}

Document.create(fileData).exec(function(err, savedFile){
if (err) {
next(err);
} else {
results.push({
id: savedFile.id,
url: '/files/' + savedFile.name,
document: savedFile
});
next();
}
});

通过命令行查看我的本地 mongo 数据库,我可以看到文档的所有者字段设置如下 "owner": ObjectId("xxxxxxxxxxxxxxxxxxxxxxxx")这符合预期。

然而,当我稍后通过 sails.log.debug("user has documemts", req.user.documents); 在 DocumentController 中检查 req.user 对象时我明白了

debug: user has documents [ add: [Function: add], remove: [Function: remove] ]

而不是 Document 对象的数组。

在我生成的 slim 模板中

if req.user.documents.length > 0
ul
for doc in req.user.documents
li= doc.toString()
else
p No Documents!

我总是得到“没有文件!”

我似乎遗漏了一些明显的东西,但我不确定那是什么。

最佳答案

我通过浏览 Waterline 源代码解决了这个问题。

首先,正如我所希望的,关联的双方都受到 Document 实例创建的影响,我只需要重新加载我的用户。

在 Controller 中,这就像 User.findOne(req.user.id).populateAll().exec(...) 一样简单

我还修改了我的passport服务助手如下

function findById(id, fn) {
User.findOne(id).populateAll().exec(function (err, user) {
if (err) return fn(null, null);
return fn(null, user);
});
}

function findByEmail(email, fn) {
User.findOne({email: email}).populateAll().exec(function (err, user) {
if (err) return fn(null, null);
return fn(null, user);
});
}

现在 user 及其关联已根据请求正确加载。

我必须深入研究源代码才能找到 populateAll() 方法,因为在我能找到的任何地方都没有实际记录。我也可以使用 populate('documents') 代替,但我即将向用户添加其他关联,因此需要 populateAll() 加载所有相关关联。

关于javascript - 如何在与 Sails 0.10.x 的一对多关系中引用关联模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24571742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com