亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Apollo RESTDataSource 調用其他 RESTDataSource?

Apollo RESTDataSource 調用其他 RESTDataSource?

海綿寶寶撒 2022-07-15 09:36:04
假設我有 2 個擴展 RESTDataSource 的 API 類:class MoviesAPI extends RESTDataSource {async getMovies() {}}class SongsAPI extends RESTDataSource {async getSongs() {}}如何getSongs從getMovies現有的 Apollo 服務器上下文中調用?
查看完整描述

1 回答

?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

this.context您可以通過在數據源類中獲取 apollo 服務器上下文并dataSources通過this.context.dataSources.


例如


server.ts:


import { ApolloServer, gql } from 'apollo-server';

import { MoviesAPI } from './MoviesAPI';

import { SongsAPI } from './SongsAPI';


const typeDefs = gql`

  type Query {

    movies: String

  }

`;

const resolvers = {

  Query: {

    movies: (_, __, { dataSources }) => {

      return dataSources.moviesAPI.getMovies();

    },

  },

};


const server = new ApolloServer({

  typeDefs,

  resolvers,

  dataSources: () => {

    return {

      moviesAPI: new MoviesAPI(),

      songsAPI: new SongsAPI(),

    };

  },

});


server.listen().then(({ url }) => {

  console.log(`Apollo server is listening on ${url}`);

});

MoviesAPI.ts:


import { RESTDataSource } from 'apollo-datasource-rest';


export class MoviesAPI extends RESTDataSource {

  async getMovies() {

    const songs = await this.context.dataSources.songsAPI.getSongs();

    const movies = ['a', 'b'];

    return JSON.stringify({ movies, songs });

  }

}

SongsAPI.ts:


import { RESTDataSource } from 'apollo-datasource-rest';


export class SongsAPI extends RESTDataSource {

  async getSongs() {

    return ['x', 'y'];

  }

}

從客戶端發送 GraphQL 查詢:


query{

  movies

}

響應負載:


{

  "data": {

    "movies": "{\"movies\":[\"a\",\"b\"],\"songs\":[\"x\",\"y\"]}"

  }

}

包版本:"apollo-datasource-rest": "^0.8.1","apollo-server": "^2.12.0"


源代碼:https ://github.com/mrdulin/apollo-graphql-tutorial/tree/master/src/stackoverflow/61425326


查看完整回答
反對 回復 2022-07-15
  • 1 回答
  • 0 關注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號