Initializing
npm init
Installing Dependencies
npm i express mongoose
Development dependencies
npm i --save-dev dotenv nodemon
creating a basic server server.js
const express = require('express')
const app = express()
app.listen(3000,()=> console.log('Server started'));
connecting to mongo database
const mongoose = require('mongoose')
// connect to database
mongoose.connect('mongodb://localhost/subscribers', { useNewUrlParser: true })
// checking db connection
const db = mongoose.connection
db.on('error',(error)=>console.error(error))
db.once('open',(on)=>console.log('Connected to Database'))
using your .env
file
// calling the file
require('dotenv').config()
// using it in the connection
mongoose.connect(process.env.DB_URL, { useNewUrlParser: true })
Making app use json
app.use(express.json())
Making routes
After creating the routes/subscribers.js
file, you require it in your server.js
=>
const subscriberRouter = require('./routes/subscribers',subscriberRouter)
creating a middleware for subscriber route routes/subscribers.js
const express = require('express')
const router = express.Router()
module.exports = router
Creating the Rest
const express = require('express')
const router = express.Router()
//get all
router.get('/',(req,res)=>{
})
// get one
router.get('/:id',(req,res)=>{
})
// create one
router.post('/',(req,res)=>{
})
// update
router.patch('/:id',(req,res)=>{
})
//deleting
router.delete('/:id',(req,res)=>{
})
module.exports = router
creating a model for subscriber database interaction models/subscriber.js
const mongoose = require('mongoose')
// interaction with database
const subscriberSchema = new mongoose.Schema({
name:{
type: String,
required: true
},
subscriberToChannel:{
type: String,
required: true
},
subscribeDate:{
type: Date,
required: true,
default: Date.now
}
})
module.exports = mongoose.model('Subscriber',subscriberSchema)
Get data from the routes
const Subscriber = require('../models/subscriber')
//get all
router.get('/',async(req,res)=>{
try{
const subscribers = await Subscriber.find()
res.json(subscribers) // if connected get data
}catch(err){
res.status(500).json({message: err.message}) // throw error if an error was found
}
})
// create one
router.post('/',async(req,res)=>{
const subscriber = new Subscriber({
name: req.body.name,
subscribedToChannel: req.body.subscribedToChannel
})
try{
const newSubscriber = await subscriber.save()
res.status(201).json(newSubscriber)
}catch(err){
rest.status(400).json({message: err.message})
}
})
Creating a middleware
async function getSubscriber(req, res, next){
let subscriber
try{
subscriber = await Subscriber.findById(req.params.id)
if(subscriber == null){
return res.status(404).json({message: 'Cannot find subscriber'})
}
}catch(err){
return res.status(500).json({message: err.message})
}
res.subscriber = subscriber
next()
}
other routes data
// update
router.patch('/:id', async(req,res)=>{
if(req.body.name != null){
res.subscriber.name = req.body.name
}
if(req.body.subscribedToChannel != null){
res.subscriber.subscribedToChannel = req.body.subscribedToChannel
}
try{
const updatedSubscriber = await res.subscriber.save()
res.json(updatedSubscriber)
}catch(err){}
res.status(400).json({message: err.message})
})
//deleting
router.delete('/:id',getSubscriber,async(req,res)=>{
try{
await res.subscriber.remove()
res.json({message: 'Deleted Subscriber'})
}catch(err){
res.status(500).json({message: err.message})
}
})
Install body parser package
the body parser package is used to parse data in express framework from form fields
npm i body-parser
and requiring it is const bodyParser = require('body-parser')