Express.js and GraphQL can be a powerful way to handle user-related operations in your application

GraphQL



What?

Creating a user management system using Express.js and GraphQL can be a powerful way to handle user-related operations in your application. Here's a step-by-step guide on how to set up a basic user management system using these technologies.

After saving the data
Install the necessary packages:

npm install express express-graphql graphql express-graphql mongoose

Create a MongoDB Database:

You'll need a MongoDB database to store user information. Make sure you have MongoDB installed, create a database, and configure a connection to it.

Define the User Model:

Create a user model using Mongoose, which represents the user entity. This model should include fields like username, email, password (hashed), etc. Here's an example of a user model:


const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
username: String,
email: String,
password: String, // You should store hashed passwords
});

const User = mongoose.model('User', userSchema);

module.exports = User;

Set up Express and GraphQL:

Create an Express server and set up GraphQL using the express-graphql package. Define your GraphQL schema, which will include types for User and queries/mutations to interact with user data.


const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const { GraphQLSchema, GraphQLObjectType, GraphQLString, GraphQLID } = require('graphql');
const mongoose = require('mongoose');

const User = require('./models/User');

mongoose.connect('mongodb://localhost/usermanagement', { useNewUrlParser: true });

const UserType = new GraphQLObjectType({
name: 'User',
fields: () => ({
id: { type: GraphQLID },
username: { type: GraphQLString },
email: { type: GraphQLString },
}),
});

const RootQuery = new GraphQLObjectType({
name: 'RootQueryType',
fields: {
user: {
type: UserType,
args: { id: { type: GraphQLID } },
resolve(parent, args) {
return User.findById(args.id);
},
},
},
});

const Mutation = new GraphQLObjectType({
name: 'Mutation',
fields: {
addUser: {
type: UserType,
args: {
username: { type: GraphQLString },
email: { type: GraphQLString },
password: { type: GraphQLString },
},
resolve(parent, args) {
const user = new User({
  username: args.username,
  email: args.email,
  password: args.password,
});
return user.save();
},
},
},
});

const schema = new GraphQLSchema({
query: RootQuery,
mutation: Mutation,
});

const app = express();

app.use('/graphql', graphqlHTTP({
schema,
graphiql: true,
}));

app.listen(4000, () => {
console.log('Server is running on port 4000');
});

Testing Your GraphQL API:

You can now test your GraphQL API using tools like GraphQL Playground or Postman. Here's an example query to add a user:


mutation {
addUser(username: "user1", email: "user1@email.com", password: "password") {
id
username
email
}
}

And a query to retrieve a user by their ID:

{
user(id: "your_user_id") {
username
email
}
}