Skip to content

app-generator/api-server-nodejs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

d2ade7b Β· Dec 11, 2023
Jul 4, 2021
Nov 30, 2022
Jul 20, 2021
Dec 2, 2022
Jul 20, 2021
Jul 20, 2021
Nov 28, 2022
Jul 20, 2021
Aug 6, 2023
Nov 30, 2022
Jul 20, 2021
Dec 11, 2023
Nov 13, 2022
Jul 20, 2021
Jul 20, 2021
Nov 30, 2022
Jul 20, 2021
Jul 20, 2021
Jul 20, 2021

Repository files navigation

Express/Nodejs Starter with JWT Authentication, OAuth (Github), and SQLite persistence - Provided by AppSeed. Authentication Flow uses json web tokens via Passport library - passport-jwt strategy.

πŸ‘‰ Support via Discord & Email provided by AppSeed.


Features

  • πŸš€ Full-stack ready with React Soft Dashboard
  • βœ… Simple, intuitive codebase - can be extended with ease.
  • βœ… TypeScript, Joy for validation
  • βœ… Stack: NodeJS / Express / SQLite / TypeORM
  • βœ… Auth: Passport / passport-jwt strategy
  • πŸ†• OAuth for Github

Tested with:

NodeJS NPM YARN
v18.0.0 βœ… βœ…
v16.10.0 βœ… βœ…
v14.15.0 βœ… βœ…

Nodejs API Server - Open-source Nodejs Starter provided by AppSeed.


✨ Requirements


✨ How to use the code

πŸ‘‰ Step 1 - Clone the project

$ git clone https://github.com/app-generator/api-server-nodejs.git
$ cd api-server-nodejs

πŸ‘‰ Step 2 - Install dependencies via Yarn

$ npm i
// OR 
$ yarn

πŸ‘‰ Step 3 - Run the SQLite migration via TypeORM

$ npm run typeorm migration:run
// OR 
$ yarn typeorm migration:run

πŸ‘‰ Step 4 - Edit the .env using the template .env.sample.

PORT=5000                       # API PORT
SQLITE_PATH=./database.db       # Path to the SQLite database file
SECRET="Whatever-STRONG"        # Secret for sensitive data hashing 

# Same as for React APP
GITHUB_OAUTH_CLIENT_ID= ...     # Github OAuth secret 
GITHUB_OAUTH_CLIENT_SECRET= ... # Github OAuth secret

πŸ‘‰ Step 5 - Start the API server (development mode)

$ npm run dev
// OR
$ yarn dev

πŸ‘‰ Step 6 - Production Build (files generated in build directory)

$ yarn build

πŸ‘‰ Step 7 - Start the API server for production (files served from build/index.js)

$ yarn start

The API server will start using the PORT specified in .env file (default 5000).


✨ Codebase Structure

< ROOT / src >
     | 
     |-- config/                              
     |    |-- config.ts             # Configuration       
     |    |-- passport.ts           # Define Passport Strategy             
     | 
     |-- migration/
     |    |-- some_migration.ts     # database migrations
     |
     |-- models/                              
     |    |-- activeSession.ts      # Sessions Model (Typeorm)              
     |    |-- user.ts               # User Model (Typeorm) 
     | 
     |-- routes/                              
     |    |-- users.ts              # Define Users API Routes
     | 
     | 
     |-- index.js                   # API Entry Point
     |-- .env                       # Specify the ENV variables
     |                        
     |-- ************************************************************************

✨ SQLite Path

The SQLite Path is set in .env, as SQLITE_PATH


✨ Database migration

πŸ‘‰ Generate migration:

$ yarn typeorm migration:generate -n your_migration_name

πŸ‘‰ Run migration:

$ yarn typeorm migration:run

✨ API

For a fast set up, use this POSTMAN file: api_sample

πŸ‘‰ Register - api/users/register

POST api/users/register
Content-Type: application/json

{
    "username":"test",
    "password":"pass", 
    "email":"test@appseed.us"
}

πŸ‘‰ Login - api/users/login

POST /api/users/login
Content-Type: application/json

{
    "password":"pass", 
    "email":"test@appseed.us"
}

πŸ‘‰ Logout - api/users/logout

POST api/users/logout
Content-Type: application/json
authorization: JWT_TOKEN (returned by Login request)

{
    "token":"JWT_TOKEN"
}

✨ Update role for existing user

πŸ‘‰ Using npm:

$ npm run update-role [user_id] [role_id (optional)]


πŸ‘‰ Using yarn:

$ yarn update-role [user_id] [role_id (optional)]

  • [user_id] is the id of existing user to update role for.
  • [role_id] is the id of role: 1 for admin & 2 for user. If you don't provide any role_id it would update user to admin role.

✨ Run the Tests (minimal suite)

$ npm run test
// OR
$ yarn test

✨ Credits

This software is provided by the core AppSeed team with an inspiration from other great NodeJS starters:



Node JS API Server - provided by AppSeed App Generator