使用技术:
-
用于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
}
从操场上执行查询时,来自模型的字段"SAP"已填满,但字段别名"UnitVol"设置为null(请参见图像GraphQL result) .
仔细查看,Sequelize执行以下SQL语句:
Executing (default): SELECT [SAP], [Unit/V] AS [UnitVol] FROM [product codes] WHERE [product codes].[SAP] = N'22736';
上面描述的Query结果返回带别名的值(console.log(result)的提取):
product codes {
dataValues:
{ SAP: '22736',
UnitVol: 9 }
},
因此,似乎解析器返回的SQL别名与graphQL架构之间存在缺失的链接 . 任何帮助深表感谢 .
1 回答
我找到了解决方案:
我没有返回sequelize结果,而是在结果中返回'datavalues'数组:
我必须控制结果不为null(graphQL请求没有条目) . 如果有人有更清洁的答案,我会很乐意测试它!谢谢 .