从Sequelize getter方法访问关联表
Accessing an associated table from a Sequelize getter method
这是我的第一个node.js web应用程序后20年的c++,我想我只是需要有人指出我在正确的方向在这里。
我正在写一个处理学校和学生的应用程序的服务器端。当客户端(通过我的REST API)为特定学生发送请求时,我希望返回学生的姓、名和学校。我正在使用一个名为epilogue的库,它解析请求,通过sequelize读/写MySQL数据库,并将结果封装在JSON响应中。它将发送我为student定义的所有字段以及我定义的任何getter的值。一切都很顺利。我已经能够使用epilogue的POST, PUT, GET和一般保持MySQL数据库的更新。
然而,当我试图定义一个返回学生学校名称的getter方法时,事情变得棘手了。为了做到这一点,我必须访问学校表中的一条记录并获取学校名称。
var school = sequelize.define("School", {
SchoolName: {
type: DataTypes.STRING,
},
}, {
classMethods: {
associate: function(models) {
school.hasMany(models.Student);
}
}
}
}
var student = sequelize.define("Student", {
FirstName: {
type: DataTypes.STRING,
},
LastName: {
type: DataTypes.STRING,
},
}, {
classMethods: {
associate: function(models) {
student.belongsTo(models.School);
},
},
getterMethods: {
FullName: function() {
return this.FirstName + ' ' + this.LastName; // This works just fine
},
SchoolName: function() {
return this.getSchool().SchoolName; // This doesn't work because getSchool is asynchronous
}
}
}
}
问题是。getschool()是异步的,所以似乎我必须使用。then来访问结果。承诺对我来说是一个新概念,但我试过这样做:
SchoolName: function {
return this.getSchool.then(function(school) {
return school.SchoolName;
});
}
但是这似乎只是返回Promise本身,而不是Promise的结果,因为在getter返回的时候Promise还没有完成。因此,我最终向客户端发送如下内容:
{
"FullName": "John Doe",
"SchoolName": {
"isFulfilled": false,
"isRejected": false
},
"id":1,
"FirstName":"John",
"LastName":"Doe"
}
似乎这里的getter必须是同步的,所以看起来我只需要一些方法来告诉getter停止并等待,直到Promise完成,然后返回值。但这似乎违反了node.js的异步特性。所以,我有一种预感,我从根本上误解了一些关于sequize .js或node.js或promises甚至数据库设计的重要内容。有人能帮我转一下吗?主要是,我想知道:正确的方法是什么?
是的,getSchool()
方法返回一个promise。您需要让序列化查询包含关联。您可以手动创建一个新的web服务并放入您自己的序列化查询,或者告诉epilogue这样做(如果可以的话)。看看结语代码中的单元测试。也许您可以添加选项:associations: true
来加载关联。
- 存储在变量中的关联数组中的访问键
- Javascript如何正确访问关联数组元素
- 在分析 XML 文档后循环访问关联数组
- 以编程方式访问 Sencha Touch 2 列表中的 hasMany 关联点击处理程序
- 如何访问所有嵌套的关联数组元素
- 访问关联数组中关联数组的数据
- 在MongoDB MapReduce中访问关联数组/对象
- 访问对象值作为关联数组值
- 与控件ID关联的访问服务器控件
- 访问和更新对象变量或关联数组
- 如何在javascript中访问这个关联数组
- 从Sequelize getter方法访问关联表
- 如何动态保存两个关联的值到一个数组中,并在js中访问它们
- 访问关联数组
- 如何从link函数访问与指令关联的控制器实例?
- 访问与指令实例关联的控制器
- jQuery UI Slider:从与幻灯片事件关联的函数中访问选项
- JS:通过变量进行关联数组访问
- AngularJS - 从其关联的控制器按 Id 访问视图元素
- 无法从Jquery访问关联模型