gpt4 book ai didi

sequelize.js - GraphQL + Sequelize 解析器给出空数据

转载 作者:行者123 更新时间:2023-12-03 22:20:03 26 4
gpt4 key购买 nike

使用中的技术:

  • NodeJS 运行 http 服务器
  • ExpressJS 框架
  • 用于 graphQL 的 Apollo-server-express
  • Sequelize 连接到 postgres 数据库
  • Postgresql 存储数据

  • 我正在尝试让 graphQL 在我的节点服务器上工作。我特别遇到问题的地方是 graphql 解析器。

    我有以下代码,它工作正常。
    let User = require('./server/models').User;
    let data = User.find({where: {email: "Test@gmail.com"}})
    .then(function (foundUser) {
    console.log(foundUser.dataValues);
    return foundUser.dataValues;
    });

    const resolvers = {
    Query: {
    user(root, args){
    return data;
    }
    }
    };

    当客户端查询 graphql 端点时:
    query Query{
    user(email:"literallyanything@cangohereATM.com") {
    email
    }
    }

    他们总是得到:
    {
    "data": {
    "user": {
    "email": "Test@gmail.com"
    }
    }
    }

    哪个好!这是预期的行为。照原样,任何参数都可以通过 user(email:"literallyanything@cangohereATM.com") 传递到查询中,结果将是相同的。再次,这是预期的。

    但是,当我移动代码时,来自数据库的数据请求在解析器中,如下所示:
    const resolvers = {
    Query: {
    user(root, args){
    User.find({where: {email: "Test@gmail.com"}})
    .then(function (foundUser) {
    console.log(foundUser.dataValues);
    return foundUser.dataValues;
    });
    }
    }
    };

    客户端将始终使用与以前相同的查询从 graphql 端点获取此响应(但是,console.log 输出适当的信息):
    {
    "data": {
    "user": null
    }
    }

    我怀疑我未能理解 apollo-server-express/graphql-tools 如何处理 promise ,但我不确定如何从这一点向前推进。任何帮助深表感谢。

    最佳答案

    您只需要在 return 之前添加一个 User 以确保您的 Promise 正确链接。

    const resolvers = {
    Query: {
    user(root, args){
    User.find({where: {email: "Test@gmail.com"}})
    .then(function (foundUser) {
    return foundUser.dataValues;
    });
    }
    }
    };

    在您之前的代码中(当对模型的调用驻留在解析器之外时),您在解析器内部返回 data。在这种情况下, data 实际上不是您的数据库查询结果,而是将解析为该查询结果的 Promise。在你更新的代码中,你仍然有一个 Promise,但你没有在你的解析器函数中返回它。 GraphQL 将获取返回值并等待它,如果它是一个 Promise,或者以其他方式使用该值——因为您有效地返回 undefined ,这就是解析器用于 user 的值。

    关于sequelize.js - GraphQL + Sequelize 解析器给出空数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49824756/

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