【问题标题】:GraphQL, Mongoose Resolver RootQuery SyntaxGraphQL,Mongoose 解析器 RootQuery 语法
【发布时间】:2016-10-14 12:13:58
【问题描述】:

我的解析器查询需要是什么样子才能在 Graphiql 中返回此 MongoDB 实例中的项目列表。 这是当前的解析器,它将所有项目记录到控制台但未显示在 graphiql 中。

import { Biz } from './connectors';

const resolvers = {
  Query: {
    biz(_, { name, address }) {
      return Biz.find(function (err, biz) {
        if (err) return console.error(err);
        console.log(biz);
      });
    },
  },
};

export default resolvers;

graphiql查询和响应在这里:

schema.js 中的类型定义

const typeDefinitions = `
type Biz {
 name: String
 address: String
}

type Query {
 biz(name: String, address: String): Biz
}

schema {
 query: Query
}
`;

export default [typeDefinitions]; 

这是连接器:

// businesses in mongo DB
    const MONGOLAB_URI = 'mongodb://user:password@ds888878.mlab.com:88778/db';
    const mongo = Mongoose.connect(MONGOLAB_URI, function (err, res) {
     if (err) {
       console.log ('ERROR connecting to: ' + MONGOLAB_URI + '. ' + err);
     } else {
       console.log ( 'Succeeded connected to: ' + MONGOLAB_URI );
     }
    });

    const BizSchema = Mongoose.Schema({
     _id: Object,
     address: String,
     city: String,
     country: String,
     heading: String,
     headingid: Number,
     img_url: String,
     name: String,
     objectId: String,
     phonenumber1: String,
     website: String,
     latitude: Number,
     longitude: Number,
    });

    const Biz = Mongoose.model('bizs', BizSchema);

export { Biz };

数据库中的示例对象

{
               "_id": {
                   "$oid": "573e8c9b1379f0f2fad98290"
               },
               "accountid": 1404,
               "address": "737, Grand Rue,",
               "city": "Port-au-Prince",
               "country": "Haiti",
               "createdAt": "10/26/2015 7:27:42 PM",
               "heading": "Computer, Printers and Supplies",
               "headingid": 323,
               "img_url": "https://res.cloudinary.com/klik-io/image/upload/v1454850817/pages-jaunes-haiti-icon_sosoco.png",
               "name": "A & M Entreprises",
               "objectId": "0lw9lVl23j",
               "phonenumber1": "+509 3770 0303",
               "website": "http://868.ht"
            }

这是 server.js 文件。

import express from 'express';
import { apolloServer } from 'apollo-server';
import Schema from './src/data/schema';
// import Mocks from './data/mocks';
import Resolvers from './src/data/resolvers';

const GRAPHQL_PORT = 8080;

const graphQLServer = express();
graphQLServer.use('/graphql', apolloServer({
  graphiql: true,
  pretty: true,
  schema: Schema,
  resolvers: Resolvers
  // allowUndefinedInResolve: true,
  // printErrors: true,
  // mocks: Mocks,
}));
graphQLServer.listen(GRAPHQL_PORT, () => console.log(
  `GraphQL Server is now running on http://localhost:${GRAPHQL_PORT}/graphql`

));

【问题讨论】:

  • 我假设这是 apollo 服务器。如果是这样,您如何调用 express 中间件?我的猜测是问题就在那里。
  • 这个例子试图迭代我认为没有使用中间件的入门工具包。 github.com/apollostack/apollo-starter-kit。我没有添加中间件。尝试返回列表是否需要实现中间位置?那是异步的吗?
  • 问的不同:你有没有修改过 server.js?这就是定义服务器的地方,包括 apolloServer 中间件。
  • 我禁用了模拟以使用 mlab mongodb 实例。注释掉模拟导入和模拟:模拟
  • @helfer 我更新了问题并提供了更多信息。我希望它更清楚。谢谢

标签: mongodb mongoose graphql graphql-js


【解决方案1】:

我在根查询中解决了这个问题。我注意到docs 中的帖子返回了一个帖子数组 [Post] 并应用了该概念。

在 schema.js 中,我将 Query 更改为带有 [Biz] 的数组:

type Query {
  biz(name: String, address: String): [Biz]
}

然后在resolvers.js 中我将resolvers.Query 返回语句语法更改为:

Query: {
        biz(_, {name, address}) {
            return Biz.find();
        }
    } 

【讨论】:

    猜你喜欢
    • 2020-05-07
    • 2017-07-27
    • 2020-02-29
    • 2019-12-21
    • 2021-10-15
    • 2019-06-07
    • 2018-09-07
    • 2020-01-18
    • 2019-02-08
    相关资源
    最近更新 更多