Simple Demo Application
API built with Node + Express + GraphQL + Sequelize (supports MySQL, Postgres, Sqlite and MSSQL).
WebApp built with React + Redux.
Written in ES6 using Babel + Webpack.
- List thoughts
- Add thought
- Delete thought
- View single thought
- Clone repo
git clone [email protected]:atulmy/fullstack-graphql.git fullstack-graphql
- Install NPM modules API
cd api
andnpm install
- Install NPM modules Webapp
cd web
andnpm install
- Modify
/api/src/config/database.json
for database credentials - Modify
/api/src/config/config.json
for API port (optional) - Modify
/web/.env
for web port (optional) - Run API
cd api
andnpm start
, browse GraphiQL at http://localhost:8000/ - Run Webapp
cd web
andnpm start
, browse web at http://localhost:3000/
[nodemon] starting `babel-node src/index.js --presets es2015,stage-2`
SETUP - Connecting database...
SETUP - Loading modules...
SETUP - GraphQL...
SETUP - Syncing database tables...
INFO - Database connected.
INFO - Database sync complete.
SETUP - Starting server...
INFO - Server started on port 3000.
Video: MOV
fullstack-graphql
βββ api (api.example.com)
β βββ src
β β βββ config
β β βββ models
β β βββ schema
β β βββ setup
β β βββ index.js
β β
β βββ package.json
β
βββ web (example.com)
β βββ public
β βββ src
β β βββ components
β β βββ setup
β β βββ index.js
β β
β βββ .env
β βββ package.json
β
βββ .gitignore
βββ README.md
- Adding new Module (Eg: Users):
- Copy
/api/src/models/thought.js
to/api/src/models/user.js
and modify the file for table name and respective fields - Add an entry to the
models
object in/api/src/models/index.js
- Copy
/api/src/schema/thoughts
to/api/src/schema/users
and modifytype.js
,resolvers.js
andfields/query.js
andfields/mutations.js
- Import
/api/src/schema/users/fields/query.js
in/api/src/schema/query.js
- Import
/api/src/schema/users/fields/mutations.js
in/api/src/schema/mutations.js
- Copy
- Adding new Module (Eg: Users):
- Create folder
users
under/web/src/components/
- Create your Container and Resusable components under
/web/src/components/users
- Create
api
folder under/web/src/components/users
- Add
actions.js
where all your Redux Action Types and Actions will reside (refer/web/src/components/thoughts/api/actions.js
) - Add
state.js
where all your respective Reducers will recide (refer/web/src/components/thoughts/api/state.js
) - Import the module state in
/web/src/setup/store.js
to make it avaliable to the app - Encapsulate all your User related code in
/web/src/components/users
- Create folder
- Adding new Route (Eg:
/users
):- Add a new entry to
routes
object in/web/src/setup/routes.js
(eguser: { list: '/list' }
) - Edit
/web/src/components/App.js
and add the route entry
- Add a new entry to
These queries are generated on client side using queryBuilder()
helper defined in /web/src/setup/helpers.js
Query - Get List query { thoughts { id, name, thought } } |
Response { "data": { "thoughts": [ { "id": 1, "name": "Arya Stark", "thought": "A girl has no name" }, { "id": 2, "name": "Jon Snow", "thought": "I know nothing" } ] } } |
Query - Get by Param query { thought(id: 1) { id, name, thought } } |
Response { "data": { "thought": { "id": 1, "name": "Arya", "thought": "A girl has no name" } } } |
Mutation - Create mutation { thoughtCreate( name: "Tyrion Lannister", thought:"I drink and I know things" ) { id } } |
Response { "data": { "thoughtCreate": { "id": 3 } } } |
Mutation - Remove mutation { thoughtRemove(id: 3) { id } } |
Response { "data": { "thoughtRemove": { "id": null } } } |
Facebook Groups: NodeJS β’ ReactJS β’ GraphQL
Reddit: NodeJS β’ ReactJS β’ GraphQL
Following projects have been built with or inspired from fullstack-graphql
- Crate - Get monthly subscription of trendy clothes and accessories - GitHub
- HIRESMART - Application to streamline hiring process - GitHub
- Would really appreciate if you add your project to this list by sending a PR
- Start learning by looking at sample codes: #LearnByExamples
If you liked this project, please donate to support it β€οΈ
Copyright (c) 2017-18 Atul Yadav http://github.com/atulmy
The MIT License (http://www.opensource.org/licenses/mit-license.php)