Получение данных из api в резолвере graphql, развернутом в функции azure node.js

Я пытаюсь развернуть сервер GraphQL на платформе node.js с помощью функций Azure. Мне удалось развернуть базовое приложение hello world. Однако мне нужно получить данные из серверного API в преобразователе. Я не могу заставить пакет fetch или request работать в функциях Azure. Ниже мой код:

var { graphql, buildSchema } = require('graphql');  
var fetch = require('node-fetch');
var request = require('request');

var schema = buildSchema(`
  type Query {
    myObject: MyObject
  }

  type MyObject { 
   someId (data: String) : String
  }
`);

var root = { 
  myObject: () => {
     return { 
        someId: (args) => {
            // Code enters till this point. 
            // I can see context.info messages from here. 
            // return "hello";  <--- This works perfectly fine. 
            return request('http://example.com', function (error, response, body) {
                    // -----> Code never enters here.
                    return body;
                });                   
          }
       }   
   }
};

module.exports = function (context, req) {
     context.log('JavaScript HTTP trigger function processed a request.');
     graphql(schema, req.body, root)
        .then(response => {
           context.res = {
               body: JSON.strigify(response)
          };

    context.done();
 });
};

Я пробовал использовать модули fetch и request. Но с ними обоими я наблюдаю одно и то же поведение - ответ никогда не возвращается. Время ожидания запроса истекает через 5 минут. Если вместо fetch или request я решу вернуть какое-то фиктивное значение, я увижу, что ответ на запрос возвращается правильно. С fetch я не вижу, чтобы блок then или блок catch когда-либо выполнялись.

Примечание. Я пробовал URL-адреса http и https в URI запроса, но ни один из них, похоже, не возвращает никаких данных.

Это проблема с тем, как я реализовал fetch / request, или это проблема с функциями Azure в целом?

Вы проверяли этот пост? stackoverflow.com/questions/43123969/…

Thomas 14.09.2018 02:22

^ 1. Это все статические данные, которые отлично работают. Мне нужно получить данные из API. 2. Здесь используется Apollo-graphQL. Я использую vanilla graphQL

letsc 14.09.2018 03:23
0
2
358
1

Ответы 1

Отвечая на свой вопрос: Кажется, что node -fetch и request на самом деле не возвращают обещания. Обертывание request вокруг Promise, похоже, решает проблему. Что-то похожее на этот ответ.

Другие вопросы по теме