express-mongo-graphql-starter
A starter API project with nodejs + express + mongo + graphql (apollo) stack, secured by jsonwebtoken. This repository will be a starting point for my upcoming nodejs based graphql projects. Can be a starting point for anyone who is interested in learning graphql too!
Using a mongo database on default port and creating two collections: User
and Record
. Collections have a 1-n relation.
Api is running on port number 3333
, serving two endpoints:
/auth
signup and authentication, open for everyone/graphql
basic crud operations and search of record entity, requires Authorization token on header
Usage
After all required packages are installed by npm install
command, node index.js
or npm run start
will make the API running.
Once it runs on local machine or cloud environment, any API testing tool like Postman would work. API responds as expected, if the request is a HTTP POST
, with Content-Type specified as application/json
on the header.
Sample authentication queries to paste to the request body:
- Signup:
{
"query": "mutation SignupUserMutation($email: String, $password: String, $username: String) {
signupUser(email: $email, password: $password, username: $username) { user { id username } token }
}",
"variables": {"password": "1234", "email": "[email protected]", "username": "alperklc"}
}
- Authentication of a user:
{
"query": "mutation SigninUserMutation($email: String!, $password: String!) { authenticateUser(email: $email, password: $password) { user { id username updatedAt } token }
}",
"variables": {"password": "1234", "email": "[email protected]"}
}
CRUD and search queries for Record entity:
We will get a token after login via authenticateUser
mutation on auth endpoint. Following examples are requiring this token specified on the header (Authorization: token
). CRUD operations are restricted to the given user.
- Create record:
{
"query": "mutation createRecord($description: String) {
createRecord(description: $description) { id }
}",
"variables": {
"description": "test"
}
}
- Update record:
{
"query": "mutation updateRecord($description: String $id: ID!) { updateRecord(description: $description id: $id) }",
"variables": {
"id": "5aa03efc9769c32ba2f4f5b5",
"description": "test edit"
}
}
- Delete record:
{
"query": "mutation deleteRecord($id: ID!){ deleteRecord(id: $id) }",
"variables": {
"id": "5aa05b6a8fef4c40d74c88fb"
}
}
- Get a record by ID:
{
"query": "query getRecordById($id: ID){ initialRecord: getRecordById(id: $id) { id description } }",
"variables": {"id": "5aa03efc9769c32ba2f4f5b5"}
}
- Search record:
{
"query": "query searchRecord($keyword: String! $dateGreaterThanEqual: String! $dateLessThanEqual: String!) { searchRecord(keyword: $keyword, dateGreaterThanEqual: $dateGreaterThanEqual, dateLessThanEqual: $dateLessThanEqual) { id description } }",
"variables": {
"keyword": "te",
"dateGreaterThanEqual": "2017-12-08T00:00:00.000Z",
"dateLessThanEqual": "2019-08-08"
}
}
Technology Stack
nodejs, express, graphql, apollo, mongodb, mongoose, jsonwebtoken
Roadmap / Future plans
- Will add unit and integration tests to this starter project.
- Use it on my future projects.
How to contribute?
- Fork, develop further and send a pull request :)
- Issues are welcomed too.
Posted on Utopian.io - Rewarding Open Source Contributors
Thank you for the contribution. It has been approved.
Please add a license file into your repository.
You can contact us on Discord.
[utopian-moderator]
Hey @alperblacktshirt I am @utopian-io. I have just upvoted you!
Achievements
Community-Driven Witness!
I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!
Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x