How to Merge Multiple Resolvers in GraphQL

graphQLQuery

IMerge multiple resolvers – if you’re building a GraphQL API, you’ll quickly face this problem:

“How do I organize multiple resolvers without making one huge messy file?”

In this guide, you’ll learn:

  • How to structure a GraphQL project
  • How to merge multiple resolvers
  • How to combine schemas
  • Step-by-step setup (VS Code + Node.js)
  • Best practices for scalable apps

Step 1: Setup Project in VS Code

1. Create Project Folder

Open VS Code → Open Terminal:

mkdir graphql-merge-resolvers
cd graphql-merge-resolvers
code .

2. Initialize Node Project

npm init -y

3. Install Dependencies

npm install @apollo/server express graphql graphql-tag cors @as-integrations/express5 @apollo/subgraph

4.Update package.json

{
"type": "module",
"scripts": {
"start": "node src/index.js"
}
}

Step 2: Create Folder Structure

Create this structure:

src/
index.js
/records
schema.graphql
resolvers.js
/message
schema.graphql
resolvers.js

Step 3: Create Modular Resolvers

Message Resolver

Merge Multiple Resolvers in GraphQL
const resolvers = {
Query: {
appMessage() {
return "This response is coming from the message module.";
},
},
};
export default resolvers;

Record Resolver

const recordsData = [
{ id: "1", name: "Alice", position: "Frontend Developer", level: "Senior" },
];const resolvers = {
Query: {
records() {
return recordsData;
},
},
};
export default resolvers;

Step 4: Create GraphQL Schemas

message/schema.graphql

type Query {
appMessage: String
}

records/schema.graphql

type Record {
id: ID
name: String
position: String
level: String
}
type Query {
records: [Record]
}

Step 5: Merge Schemas + Resolvers

Key Code (IMPORTANT)

const resolvers = {
Query: {
...recordResolvers.Query,
...messageResolvers.Query,
},
};

What is happening?

  • ... = Spread operator
  • Combines multiple Query objects
  • Final result = One unified API

Step 6: Create Server (index.js)

import express from "express";
import cors from "cors";
import gql from "graphql-tag";
import { ApolloServer } from "@apollo/server";
import { buildSubgraphSchema } from "@apollo/subgraph";
import { expressMiddleware } from "@as-integrations/express5";
import recordResolvers from "./records/resolvers.js";
import messageResolvers from "./message/resolvers.js";
import { readFileSync } from "fs";const app = express();
const typeDefs = gql(`
${readFileSync("./src/records/schema.graphql")}
${readFileSync("./src/message/schema.graphql")}
`);
const resolvers = {
Query: {
...recordResolvers.Query,
...messageResolvers.Query,
},
};
const server = new ApolloServer({
schema: buildSubgraphSchema({ typeDefs, resolvers }),
});
await server.start();

app.use("/graphql",
cors(),
express.json(),
expressMiddleware(server)
);

app.listen(5050, () => {
console.log("Server running at http://localhost:5050/graphql");
});

Step 7: Test Your API

Open browser:

http://localhost:5050/graphql

Run:

query {
appMessage
}
query {
records {
name
}
}

Common Mistakes

❌ Duplicate Query Names
❌ Not merging schemas properly
❌ Forgetting await server.start()
❌ Wrong file paths


Pro Tips

✔️ Keep modules separate
✔️ Use naming conventions
✔️ Use @graphql-tools/merge for large apps
✔️ Avoid large single resolver files


Conclusion

Now you know how to:

  • ✔️ Structure a GraphQL project
  • ✔️ Merge multiple resolvers
  • ✔️ Build scalable APIs

This pattern is used in real production apps

Leave a Comment

Your email address will not be published. Required fields are marked *