Upgrade na Apollo 3 v Meteoru ve 3 krocích

Apollo server 3 je venku a v Meteoru 2.4 bude na něj aktualizována kostra Apolla. Ale pokud máte ve své aplikaci Meteor existující projekt s Apollem 2, budete muset strávit trochu času, abyste se dostali k nejnovější verzi.

Zde popíšu základní 3 kroky k upgradu na Apollo 3 ve vaší aplikaci Meteor. Pamatujte, že pro vaši konkrétní aplikaci pravděpodobně uděláte trochu víc, protože existuje mnoho změn. Nezapomeňte si prostudovat průvodce migrací Apollo.

1. Přidejte Express do svých závislostí

Express se stal partnerskou závislostí pro Apollo a Connect, který je dodáván spolu s Meteorem, již nestačí, takže jej budete muset přidat, aby Apollo běželo:

meteor npm i --save express

2. Aktualizujte svůj startovací skript Apollo

Budete muset znovu navštívit svůj spouštěcí skript, protože Apollo nyní vyžaduje explicitní volání funkce start. To bude znamenat, že budete muset trochu restrukturalizovat, jak spustit server s Apollo:

// apollo.js
import { ApolloServer } from 'apollo-server-express';
import { WebApp } from 'meteor/webapp';
import { getUser } from 'meteor/apollo';
import { makeExecutableSchema } from '@graphql-tools/schema';

const server = new ApolloServer({
  schema: makeExecutableSchema({
    typeDefs,
    resolvers,
  }),
  context: async ({ req }) => ({
    user: await getUser(req.headers.authorization)
  })
})

export async function startApolloServer() {
  await server.start();
  const app = WebApp.connectHandlers;

  server.applyMiddleware({
    app,
    cors: true
  });
}

// main.js
import { startApolloServer } from './apollo';

function insertLink({ title, url }) {
  LinksCollection.insert({title, url, createdAt: new Date()});
}

try {
  startApolloServer().then();
} catch (e) {
  console.error(e.reason);
}

3. Aktualizujte své resolvery a dotazy

Téměř vše je nyní v Apollu asynchronní, takže budete muset aktualizovat své resolvery a dotazy pomocí async klíčové slovo před nimi takto:

const resolvers = {
  Query: {
    getLink: async (obj, { id }) => LinksCollection.findOne(id),
    getLinks: async () => LinksCollection.find().fetch()
  }
};

A to by mělo být ono! Tedy pokud máte velmi jednoduché nastavení. Změny spočívají v tom, že se budete muset ponořit, zejména při aktualizaci vašich možností pro Apollo, takže nezapomeňte zkontrolovat všechny podrobnosti v protokolu změn serveru Apollo.

Pokud se vám moje práce líbí, podpořte mě na GitHubu Sponsors ❤️.