PRACTICAL 8: CRUD OPERATIONS USING EXPRESS.JS AND MONGODB

```

mkdir p8
cd p8
npm init -y
npm install express mongoose dotenv cors
npm install -D nodemon

```

package.json — Replace scripts:

```

"scripts": {
  "start": "node server.js",
  "dev": "nodemon server.js"
}

```

.env

```

MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/crudDB

```

server.js

```

const express = require('express')
const mongoose = require('mongoose')
const cors = require('cors')
require('dotenv').config()

const app = express()
app.use(cors())
app.use(express.json())

mongoose.connect(process.env.MONGODB_URI)

const Item = mongoose.model('Item', new mongoose.Schema({
  name: { type: String, required: true },
  price: { type: Number, required: true, min: 0 }
}))

app.post('/items', async (req, res) => {
  try {
    const item = await Item.create(req.body)
    res.status(201).json(item)
  } catch (err) {
    res.status(400).json({ error: err.message })
  }
})

app.get('/items', async (req, res) => {
  res.json(await Item.find())
})

app.get('/items/:id', async (req, res) => {
  try {
    const item = await Item.findById(req.params.id)
    if (!item) return res.status(404).json({ message: 'Item not found' })
    res.json(item)
  } catch {
    res.status(400).json({ message: 'Invalid ID' })
  }
})

app.put('/items/:id', async (req, res) => {
  try {
    const item = await Item.findByIdAndUpdate(
      req.params.id, req.body, { new: true, runValidators: true }
    )
    if (!item) return res.status(404).json({ message: 'Item not found' })
    res.json(item)
  } catch (err) {
    res.status(400).json({ error: err.message })
  }
})

app.delete('/items/:id', async (req, res) => {
  try {
    const item = await Item.findByIdAndDelete(req.params.id)
    if (!item) return res.status(404).json({ message: 'Item not found' })
    res.json({ message: 'Item deleted successfully' })
  } catch {
    res.status(400).json({ message: 'Invalid ID' })
  }
})

app.listen(5000, () => console.log('Server running on port 5000'))

```

Run Server

```

npm run dev

```

Postman Testing

```

CREATE
POST http://localhost:5000/items
Body → raw → JSON

{
  "name": "Laptop",
  "price": 50000
}

READ ALL
GET http://localhost:5000/items

READ ONE
GET http://localhost:5000/items/ITEM_ID

UPDATE
PUT http://localhost:5000/items/ITEM_ID
Body → raw → JSON

{   
  "name": "Gaming Laptop",
  "price": 65000
}

DELETE
DELETE http://localhost:5000/items/ITEM_ID

```