sequelize.js - GraphQL/Sequelize:SQL 别名
问题描述
使用的技术:
- graphQL 的 Apollo-server-express
- Sequelize 连接到 SQL Server
我继承了一个字段不遵循任何命名约定的数据库。有些有空格和特殊字符。为避免任何问题,我在解析器查询中为这些字段使用了 SQL 别名:
const productAttributes = [
'SAP',
['Unit/V', 'UnitVol']];
...
Query: {
product: async (parent, {SAP} , { models }) => {
const result = await models.Product.find( {
where: {
SAP: SAP
},
attributes:productAttributes,
});
return result;
},
...
GraphQL 模式设置为:
type Product {
SAP: String!
UnitVol: Int
}
从 Playground 执行查询时,来自模型的字段“SAP”已被很好地填充,但字段别名“UnitVol”设置为 null(参见图像GraphQL 结果)。
仔细看,Sequelize 很好地执行了以下 SQL 语句:
Executing (default): SELECT [SAP], [Unit/V] AS [UnitVol] FROM [product codes] WHERE [product codes].[SAP] = N'22736';
上述查询结果返回具有别名的值(console.log(result) 的摘录):
product codes {
dataValues:
{ SAP: '22736',
UnitVol: 9 }
},
因此,解析器返回的 SQL 别名与 graphQL 模式之间似乎缺少链接。任何帮助深表感谢。
解决方案
我找到了一个解决方案:
我没有返回 sequelize 结果,而是在结果中返回“datavalues”数组:
return !result ? [] : result.dataValues;
我必须控制结果不为空(graphQL 请求没有条目)。如果有人有更清晰的答案,我很乐意对其进行测试!谢谢。
推荐阅读
- html - 智能手机上的网站通过键盘改变高度
- php - Enfold 4.7.6 Wordpress 主题 - 幻灯片放映(全角)包含分号“
- c# - 如何按属性对一组属性进行分组?
- python-3.x - 用部分字典替换数据框行
- html - 样式标签的样式是否正确?
- docker - 分发失败,failed_to_start_child。RabbitMQ + docker-compose 问题
- sql - 获取特定字符之前的字符串
- virtual-machine - vboxmanage guestcontrol 修改密码
- javascript - 如何在我现有的 nodejs 服务器上使用 sqs 消息
- php - VPS 重启后 OpenLiteSpeed CyberPanel 上的 Wordpress 出现 404 错误