DEV Community

Adeyemi Raji
Adeyemi Raji

Posted on

Setting up server and database to perform CRUD operations using Apollo-GraphQL, PostgreSQL, Sequelize, and Express

How to perform CRUD (create, read, update, delete) operations with Apollo GraphQL, PostgreSQL, Sequelize, and Express, you will need to set up a GraphQL server using the apollo-server-express library and connect it to a PostgreSQL database using the Sequelize ORM (Object-Relational Mapping) library. Here's a general outline of the steps you'll need to follow:

  1. Set up your Express server and GraphQL endpoint:
    Install the necessary dependencies, such as apollo-server-express, graphql-tools, express, and sequelize.
    Define your GraphQL schema, which will describe the types of data you can query and manipulate, as well as the relationships between those types.
    Implement your GraphQL resolvers, which are functions that execute the CRUD operations when a GraphQL query or mutation is received.
    Use the apollo-server-express library to create an Apollo server instance and integrate it with your Express app.

  2. Connect your GraphQL server to a PostgreSQL database using Sequelize:
    Configure Sequelize by defining your database models and establishing a connection to the PostgreSQL database.
    Write the code to perform the CRUD operations using the Sequelize API.
    Here's an example of how you might define a Sequelize model for a Task model and implement a GraphQL resolver for a create operation:

const Task = sequelize.define('task', {
  title: {
    type: Sequelize.STRING,
    allowNull: false,
  },
  description: {
    type: Sequelize.STRING,
  },
});

const resolvers = {
  Mutation: {
    async createTask(parent, args, context, info) {
      const { title, description } = args;
      const task = await Task.create({ title, description });
      return task;
    },
  },
};

Enter fullscreen mode Exit fullscreen mode

This resolver function receives a Mutation type in the GraphQL schema, along with the necessary arguments, and creates a new Task instance using the Sequelize create method. It then returns the created instance as the result of the mutation.

There are other ways the CRUD operation can be achieved, and it is explained below:

const sequelize = new Sequelize('database', 'username', 'password', {
  dialect: 'postgres',
});

const Task = sequelize.define('task', {
  // define model fields here
});

sequelize.sync();

Enter fullscreen mode Exit fullscreen mode

When defining your GraphQL schema, you will need to specify the Mutation type and the fields that correspond to each CRUD operation. For example:

type Mutation {
  createTask(title: String!, description: String): Task!
  updateTask(id: ID!, title: String, description: String): Task
  deleteTask(id: ID!): Task
}

Enter fullscreen mode Exit fullscreen mode

To ensure that your GraphQL resolvers have access to the Sequelize models, you can pass them as part of the context object when creating the Apollo server instance:

const server = new ApolloServer({
  typeDefs,
  resolvers,
  context: () => {
    return {
      Task,
    };
  },
});

Enter fullscreen mode Exit fullscreen mode

I hope this additional information is helpful! Let me know if you have any further questions.

Top comments (0)