sequelize.js - GraphQL/Sequelize : SQL alias

标签 sequelize.js graphql apollo-server

使用中的技术:

  • 用于 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”设置为空(参见图像 GraphQL result )。

    细看,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 请求没有条目)。如果有人有更清晰的答案,我很乐意测试它!谢谢。

    关于sequelize.js - GraphQL/Sequelize : SQL alias,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53568529/

    相关文章:

    sql - SequelizeJS 软删除

    javascript - Sequelize - 如何列出/查看现有模型的所有列

    node.js - 如何在 Node.js 中使用 Sequelize 运行 AND 和 Or 运算符

    javascript - Apollo Client 将具有相同 id 和不同值的对象数组替换为第一个对象的副本数组

    graphql - GraphQL字段是否支持基于传入参数的多态性?

    node.js - 使用单个服务器将 GraphQL 订阅添加到现有的 Express 应用程序

    javascript - 文件上传后返回空对象 - Apollo graphql

    mysql - 序列化创建类型错误: Cannot read property 'apply' of undefined

    typescript - 以正确的方式避免循环依赖 - NestJS

    node.js - 从解析器内部获取完整的查询字符串