Arhn - архитектура программирования

TypeGraphQl: использование с функциями Netlify / AWS Lambda

Я наконец смог заставить TypeQL работать с Netlify Functions / AWS Lambda после дня работы, просмотра документации и примеров и, в конце концов, отчаянной грубой силы.

Я делюсь своим рабочим кодом здесь для других (или для использования в будущем: P), поскольку он содержит некоторые нелогичные ключевые слова.

Нормальный подход

Ошибка, которую я получал при использовании простого примера было:

Your function response must have a numerical statusCode. You gave: $ undefined

Я, конечно, искал в проблемах, но ни одно из предложенных решений у меня не помогло.


Ответы:


1

Рабочий код

import 'reflect-metadata'
import { buildSchema } from 'type-graphql'
import { ApolloServer } from 'apollo-server-lambda'
import { RecipeResolver } from 'recipe-resolver'

async function lambdaFunction() {
  const schema = await buildSchema({
    resolvers: [RecipeResolver],
  })

  const server = new ApolloServer({
    schema,
    playground: true,
  })

  // !!! NOTE: return (await ) server.createHandler() won't work !
  exports.handler = server.createHandler()
}

// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// !!! NOTE: weird but only way to make it work with
// AWS lambda and netlify functions (netlify dev)
// also needs a reload of the page (first load of playground won't work)
lambdaFunction()
// exports.handler = lambdaFunction wont work
// export { lambdaFunction as handler } wont work
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Также я получил несколько ошибок отражения из простого примера

Unable to infer GraphQL type from TypeScript reflection system. You need to provide explicit type for argument named 'title' of 'recipe' of 'RecipeResolver

Поэтому мне пришлось придумать, как добавить явный тип к @Arg:

// previous:
// recipe(@Arg('title') title: string)
// fixed:
   recipe( @Arg('title', (type) => String) title: string
14.05.2021
  • Спасибо за то, что поделился этим. Вы нашли способ явно добавлять типы к объектам typegql? Это довольно громоздко сделать в существующем приложении с большим количеством объектов. Может декораторы не работают? Не уверен, что netlify lambda читает мой файл tsconfig 26.05.2021
  • Возможно, проверьте проблемы с type-graphql. По-видимому, вам нужно избыточно определять типы (как в декораторе, так и в поле класса) из-за ограничений системы отражения TS. 26.05.2021
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..