首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Express + GraphQL从数组中获取索引

使用Express + GraphQL从数组中获取索引
EN

Stack Overflow用户
提问于 2019-01-03 12:17:37
回答 1查看 507关注 0票数 0

我只是在用GraphQL来弄脏我的手。我在跟踪用于石墨for快件-节点反应的YouTube系列。我刚刚设置了一个基本的GraphQL模式,在这里我有一个硬编码的String数组,它是返回的。我想创建一个查询,使用GraphQL (graphiql)为我提供这个硬编码数组中元素的索引。

代码

代码语言:javascript
复制
const express = require('express'); // Add Express Module
const bodyParser = require('body-parser'); // Add Body-Parser Middleware for JSON handling in Requests
const graphqlHttp = require('express-graphql'); // Add Middleware for GraphQL Resolvers over Express HTTP
const { buildSchema } = require('graphql'); // Javascript Object-Destructuring (pull objects from packages)

const app = express();

app.use(bodyParser.json()); // JSON parsing Middleware added

app.use('/graphql', graphqlHttp({
    schema: buildSchema(`
        type RootQuery {
            events: [String!]!
            getEventIndex(eventName: String): Int
        }

        type RootMutation {
            createEvent(name: String): String
        }

        schema {
            query: RootQuery
            mutation: RootMutation
        }
    `),
    rootValue: {
        events: () => {
            return ['Cooking', 'All-Night Coding', 'Romantic'];
        },
        getEventIndex: (args) => {
            const _arr = ['Cooking', 'All-Night Coding', 'Romantic'];
            const index = _arr.findIndex(args.eventName);
            return index;
        },
        createEvent: (args) => {
            const eventName = args.name; // same as that of the parameter for `createEvent`
            return eventName;

        }
    },
    graphiql: true
}));

app.listen(3000);

我创建了一个查询getEventIndex(eventName: String): Int,它接受事件名并为我提供索引(是整数)。

graphiql结果

查询

代码语言:javascript
复制
query {
  getEventIndex(eventName: "Cooking")
}

结果

代码语言:javascript
复制
{
  "errors": [
    {
      "message": "Cooking is not a function",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "getEventIndex"
      ]
    }
  ],
  "data": {
    "getEventIndex": null
  }
}

为什么这里的Cooking被认为是一个function,而不是createEvent突变的一个论点?

当然,我跳到了GraphQL中,而没有深入研究它的规范,但我想它可能也能够处理基于参数的查询。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-03 13:59:27

此错误不特定于GraphQL。

Array.findIndex期望传入一个函数作为它的第一个参数。将为数组中的每个元素调用该函数,直到该函数返回一个真实值为止,此时它将返回该元素的索引。args.eventName的值不是一个函数(它是一个字符串),因此您将得到该错误。

要么传递给它一个函数,比如:

代码语言:javascript
复制
const index = _arr.findIndex(value => value === args.eventName)

或者只使用Array.indexOf,这可能就是您想要做的:

代码语言:javascript
复制
const index = _arr.indexOf(args.eventName)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54022149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档