[英]Migrating apollo-server-express to @apollo/server or graphql-yoga
apollo-server-express
和apollo-server-cloud-functions
已棄用,大多數在線教程顯示如何使用 graphql 設置 firebase CF 依賴。 我希望有人可以幫助我(當然還有其他人),遷移東西以便他們使用@apollo/server
v4,或者使用另一個開源庫,比如graphql-yoga
。
首先,這是直到最近我的服務器設置方式:
import { ApolloServer } from "apollo-server-express";
import admin from "firebase-admin";
import express from "express";
import schema from "./schema";
import resolvers from "./resolvers";
import UsersAPI from "./datasources/users";
const serviceAccount = require("../../private/serviceAccount.json");
const databaseURL = "https://my-app.firebaseio.com";
const globalServerApp = admin.initializeApp(
{ credential: admin.credential.cert(serviceAccount), databaseURL },
"server"
);
const globalDataSources = {
usersAPI: new UsersAPI(globalServerApp)
};
const initServer = () => {
const app = express();
const server = new ApolloServer({
typeDefs: schema,
resolvers,
dataSources: () => {
return globalDataSources;
},
uploads: false,
introspection: true,
playground: true,
context: async ({ req }) => {
return {
request: req,
};
},
});
server.applyMiddleware({ app, path: "/", cors: true });
return app;
};
export default initServer;
此外,我將為用戶架構提供以下內容:
import { gql } from "apollo-server-express";
const UserSchema = gql`
scalar JSONObject
type Something {
customer: String
}
extend type Query {
doSomething(someIDs: [String]): [Something]
}
extend type Mutation {
completeRegistration(
uid: ID!
first_name: String
last_name: String
invited_by: JSONObject
): Boolean
}
`;
export default UserSchema;
您將如何使用@apollo/server
v4、 graphql-yoga
或其他簡單方法編寫這些內容?
您使用的apollo-server-express
版本與@apollo/server
v4 的主要區別是:
express
中間件仍在主要 package 中,但現在您可以使用expressMiddleware
包裝器 function 而不是applyMiddleware
。@apollo/server-plugin-landing-page-graphql-playground
。 下面的代碼假定您已經安裝了它。context
成為特定於實現的 function,因此不再位於 ApolloServer 配置中。 現在在expressMiddleware
function 上。context
dataSources
的返回現在應該包括數據源。 這通常應該更直接一些。將所有這些放在一起(雖然,誠然,沒有你的代碼,所以我無法實際測試這個東西運行),這就是我希望為你工作的:
// These are the new packages
import { ApolloServer } from '@apollo/server';
import { expressMiddleware } from '@apollo/server/express4';
import { ApolloServerPluginLandingPageGraphQLPlayground } from '@apollo/server-plugin-landing-page-graphql-playground';
import admin from 'firebase-admin';
import express from 'express';
import schema from './schema';
import resolvers from './resolvers';
import UsersAPI from './datasources/users';
const serviceAccount = require('../../private/serviceAccount.json');
const databaseURL = 'https://my-app.firebaseio.com';
const globalServerApp = admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL }, 'server');
const globalDataSources = {
usersAPI: new UsersAPI(globalServerApp),
};
const initServer = () => {
const app = express();
const server = new ApolloServer({
typeDefs: schema,
resolvers,
introspection: true,
plugins: [ApolloServerPluginLandingPageGraphQLPlayground()],
});
app.use(
'/',
expressMiddleware(server, {
context: async ({ req }) => {
return {
request: req,
dataSources: globalDataSources,
};
},
}),
);
return app;
};
export default initServer;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.