Skip to content

Instantly share code, notes, and snippets.

@edoves
Created October 30, 2024 14:52
Show Gist options
  • Select an option

  • Save edoves/622e4a0330c220505c6e4c7a84ad90c3 to your computer and use it in GitHub Desktop.

Select an option

Save edoves/622e4a0330c220505c6e4c7a84ad90c3 to your computer and use it in GitHub Desktop.

Express Template

app.ts

const cors = require('cors')
const cookieParser = require('cookie-parser')
const app = express()

const postRoute = require('./routes/post.route.js')
const userRoute = require('./routes/user.route.js')

const corsOptions = {
  origin: true,
  credentials: true,
}


// middleware
app.use(cors(corsOptions))
app.use(express.json())
app.use(express.urlencoded({ extended: true }))
app.use(cookieParser())

// routes
app.use('/api', userRoute)
app.use('/api', postRoute)


module.exports = app

server.ts

const http = require('http')
const app = require('./app.js')

const server = http.createServer(app)

const PORT = process.env.PORT || 5000

server.listen(PORT, () => console.log('Listing to port ' + PORT))

userController.ts

import { Request, Response } from 'express'
import catchSync from '../middleware/catchSync'
import User from '../models/userModel'

/**
 * @desc    Auth user & get token
 * @route   POST /api/users/login
 * @access  Public
 */
const authUser = catchSync(async (req: Request, res: Response) => {
  res.send('auth user')
})

/**
 * @desc    Regiseter user
 * @route   POST /api/users
 * @access  Public
 */
const registerUser = catchSync(async (req: Request, res: Response) => {
  res.send('register user')
})

/**
 * @desc    Logout user / clear cookie
 * @route   POST /api/users/logout
 * @access  Private
 */
const logoutUser = catchSync(async (req: Request, res: Response) => {
  res.send('logout user')
})

/**
 * @desc    Get user profile
 * @route   GET /api/users/profile
 * @access  Private
 */
const getUserProfile = catchSync(async (req: Request, res: Response) => {
  res.send('get user profile')
})

/**
 * @desc    Update user profile
 * @route   PUT /api/users/profile
 * @access  Private
 * @note Notice that we dont passes an id here cause we gonna be using the token as indentifier for this user
 */
const updateUserProfile = catchSync(async (req: Request, res: Response) => {
  res.send('update user profile')
})

/**
 * @desc    Get users
 * @route   Get /api/users
 * @access  Private/Admin
 */
const getUsers = catchSync(async (req: Request, res: Response) => {
  res.send('get users profile')
})

/**
 * @desc    Get user by ID
 * @route   Get /api/users/:id
 * @access  Private/Admin
 */
const getUserByID = catchSync(async (req: Request, res: Response) => {
  res.send('get by id')
})

/**
 * @desc    Delete users
 * @route   DELETE /api/users/:id
 * @access  Private/Admin
 */
const deleteUser = catchSync(async (req: Request, res: Response) => {
  res.send('delete user profile')
})

/**
 * @desc    update user
 * @route   PUT /api/users/:id
 * @access  Private/Admin
 */
const updateUser = catchSync(async (req: Request, res: Response) => {
  res.send('update user')
})

export {
  authUser,
  registerUser,
  logoutUser,
  getUserProfile,
  updateUserProfile,
  getUsers,
  getUserByID,
  deleteUser,
  updateUser,
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment