Исключение: TypeError: graphqlAzureFunctions не является функцией при использовании Apollo для функций Azure - PullRequest
0 голосов
/ 04 декабря 2018

Мой package.json:

{
    "name": "azurejs",
    "version": "0.1.0",
    "private": true,
    "dependencies": {
        "apollo-server-azure-functions": "^2.2.6",
        "graphql": "^14.0.2",
        "graphql-tools": "^4.0.3"
    },
    "scripts": {},
    "devDependencies": {}
}

Использование кода, непосредственно вырванного из примера apollo:

const { graphqlAzureFunctions } = require('apollo-server-azure-functions');
const { makeExecutableSchema } = require('graphql-tools');

const typeDefs = `
  type Random {
    id: Int!
    rand: String
  }

  type Query {
    rands: [Random]
    rand(id: Int!): Random
  }
`;

const rands = [{ id: 1, rand: 'random' }, { id: 2, rand: 'modnar' }];

const resolvers = {
  Query: {
    rands: () => rands,
    rand: (_, { id }) => rands.find(rand => rand.id === id),
  },
};

const schema = makeExecutableSchema({
  typeDefs,
  resolvers,
});

module.exports = function run(context, request) {
  graphqlAzureFunctions({ schema })(context, request);
};

https://www.apollographql.com/docs/apollo-server/v1/servers/azure-functions.html

Если я перейду кконечная точка Я получаю сообщение об ошибке «graphqlAzureFunctions не является функцией», я выполнил ее поиск и действительно не могу найти функцию.

1 Ответ

0 голосов
/ 05 декабря 2018

Вы установили пакеты apollo-сервера v2 во время использования кода из учебника v1.

Следуйте учебнику v2 , установите apollo-server-azure-functions@alpha, graphql, и мы можем перейти к коду v2.

const { gql, ApolloServer } = require("apollo-server-azure-functions");

// Construct a schema, using GraphQL schema language
const typeDefs = gql`
  type Query {
    hello: String
  }
`;

// A map of functions which return data for the schema.
const resolvers = {
  Query: {
    hello: () => "world"
  }
};

const server = new ApolloServer({ typeDefs, resolvers });

module.exports = server.createHandler();

Обратите внимание, что в function.json нам нужно "name": "$return", в то время как шаблон использует "name": "res" по умолчанию.

{
  "disabled": false,
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    }
  ]
}
...