https://expressjs.com/
Express JS
Fast, unopinionated, minimalist web framework for Node.js
Install
$ npm install express --savev PS C:\nodeproject> npm install express --save
https://expressjs.com/en/starter/hello-world.html
https://mongoosejs.com/docs/
npm install mongoose --save
cors
CORS is a node.js package for providing a Connect/Express middleware that can be used to enable CORS with various options.
https://www.npmjs.com/package/cors
PS C:\nodeproject>npm i cors
run PS C:\nodeproject> node index.js
//index.js
const express = require('express')
const mongoose = require('mongoose')
const cors = require('cors')
const UserModel = require('./User')
const app = express()
const port = 3000
app.use(cors())
app.use(express.json())
main().catch(err => console.log(err));
async function main() {
try {
await mongoose.connect('mongodb://127.0.0.1/nodeexpressdb', {});
console.log("CONNECTED TO DATABASE SUCCESSFULLY");
} catch (error) {
console.error('COULD NOT CONNECT TO DATABASE:', error.message);
}
}
app.get('/hello', (req, res) => {
res.send('Hello World!')
})
app.get('/', (req, res) => {
UserModel.find()
.then(users => res.json(users))
.catch(err => res.json(err))
})
app.get('/get/:id', (req, res) => {
const id = req.params.id
UserModel.findById({_id: id})
.then(post => res.json(post))
.catch(err => console.log(err))
})
app.post('/create', (req, res) => {
UserModel.create(req.body)
.then(user => res.json(user))
.catch(err => res.json(err))
})
app.put('/update/:id', (req, res) => {
const id = req.params.id;
UserModel.findByIdAndUpdate({_id: id}, {
name: req.body.name,
email: req.body.email,
age: req.body.age
}).then(user => res.json(user))
.catch(err => res.json(err))
})
app.delete('/deleteuser/:id', (req, res) => {
const id = req.params.id;
UserModel.findByIdAndDelete({_id: id})
.then(response => res.json(response))
.catch(err => res.json(err))
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
User.js
//User.js
const mongoose = require('mongoose')
const UserSchema = new mongoose.Schema({
name: String,
email: String,
age: Number
})
const UserModel = mongoose.model("users", UserSchema)
module.exports = UserModel;
Next.js
Install requirements npm install axios
https://www.npmjs.com/package/axios
app\page.tsx
//app\page.tsx
import Link from "next/link";
import TableData from "@/components/tabledata";
import { Suspense } from "react";
import { Spinner } from "@/components/spinner";
export default function Home() {
return (
<div className="w-screen py-20 flex justify-center flex-col items-center">
<div className="flex items-center justify-between gap-1 mb-5">
<h1 className="text-4xl font-bold">Next.js 14 Node Express CRUD MongoDB (Create Read Update and Delete)| TailwindCSS DaisyUI</h1>
</div>
<div className="overflow-x-auto">
<div className="mb-2 w-full text-right">
<Link
href="/user/create"
className="btn btn-primary">
Create
</Link>
</div>
<Suspense fallback={<Spinner />}>
<TableData/>
</Suspense>
</div>
</div>
);
}
components\tabledata.tsx
//components\tabledata.tsx
"use client";
import React, { useEffect, useState } from "react";
import axios from 'axios' //npm install axios https://www.npmjs.com/package/axios
import Link from "next/link";
export default function Users() {
const [userData, setUSerData] = useState([]);
useEffect(() => {
fetchData();
}, [])
const fetchData = async () => {
try {
const result = await axios("http://localhost:3000/");
console.log(result.data);
setUSerData(result.data)
} catch (err) {
console.log("somthing Wrong");
}
}
const handleDelete=async(id)=>{
console.log(id);
await axios.delete("http://localhost:3000/deleteuser/"+id);
const newUserData=userData.filter((item)=>{
return(
item._id !==id
)
})
setUSerData(newUserData);
}
return (
<table className="table table-zebra">
<thead className="text-sm text-gray-700 uppercase bg-gray-50">
<tr>
<th className="py-3 px-6">#</th>
<th className="py-3 px-6">Name</th>
<th className="py-3 px-6">Email</th>
<th className="py-3 px-6">Age</th>
<th className="py-3 px-6 text-center">Actions</th>
</tr>
</thead>
<tbody>
{userData.map((rs, index) => (
<tr key={rs.id} className="bg-white border-b">
<td className="py-3 px-6">{index + 1}</td>
<td className="py-3 px-6">{rs.name}</td>
<td className="py-3 px-6">{rs.email}</td>
<td className="py-3 px-6">{rs.age}</td>
<td className="flex justify-center gap-1 py-3">
<Link
href={`/user/view/${rs._id}`}
className="btn btn-info">
View
</Link>
<Link
href={`/user/edit/${rs._id}`}
className="btn btn-primary">
Edit
</Link>
<button onClick={()=>handleDelete(rs._id)} className="btn btn-secondary">Delete</button>
</td>
</tr>
))}
</tbody>
</table>
);
}
components\spinner.tsx
//components\spinner.tsx
export const Spinner = () => {
return (
<span className="loading loading-spinner loading-lg"></span>
);
};
app\user\create\page.tsx
//app\user\create\page.tsx
"use client";
import React, { useState } from "react";
import axios from 'axios' //npm install axios https://www.npmjs.com/package/axios
const CreateUserPage = () => {
const [userField, setUserField] = useState({
name: "",
email: "",
age: ""
});
const changeUserFieldHandler = (e) => {
setUserField({
...userField,
[e.target.name]: e.target.value
});
//console.log(userField);
}
const onSubmitChange = async (e) => {
e.preventDefault();
try {
const responce= await axios.post("http://localhost:3000/create", userField);
console.log(responce)
window.location.href = '/';
} catch (err) {
console.log("Something Wrong");
}
}
return (
<div className="max-w-md mx-auto mt-5">
<h1 className="text-2xl text-center mb-2">Add New User</h1>
<div>
<form>
<div className="mb-5">
<label htmlFor="name" className="block text-sm font-medium text-gray-900">
Full Name
</label>
<input
type="text"
name="name"
id="name"
className="input input-bordered input-primary w-full max-w-xs"
placeholder="Full Name..."
onChange={e => changeUserFieldHandler(e)}
/>
</div>
<div className="mb-5">
<label htmlFor="email" className="block text-sm font-medium text-gray-900">
Email
</label>
<input
type="email"
name="email"
id="email"
className="input input-bordered input-primary w-full max-w-xs"
placeholder="Email..."
onChange={e => changeUserFieldHandler(e)}
/>
</div>
<div className="mb-5">
<label
htmlFor="age" className="block text-sm font-medium text-gray-900">
Age
</label>
<input
type="text"
name="age"
id="age"
className="input input-bordered input-primary w-full max-w-xs"
placeholder="Age..."
onChange={e => changeUserFieldHandler(e)}
/>
</div>
<button type="submit" className="btn btn-primary" onClick={e => onSubmitChange(e)}>Add User</button>
</form>
</div>
</div>
);
};
export default CreateUserPage;
app\user\edit\[id]\page.tsx
//app\user\edit\[id]\page.tsx
"use client";
import React, { useState, useEffect } from 'react';
import axios from 'axios' //npm install axios https://www.npmjs.com/package/axios
import Link from "next/link";
import { useParams } from 'next/navigation'
export default function ViewUserPage() {
const {id}=useParams();
console.log(id);
const [userField, setUserField] = useState({
name: "",
email: ""
});
useEffect(()=>{
fetchUser();
},[id]);
const fetchUser=async()=>{
try{
const result=await axios.get("http://localhost:3000/get/"+id);
console.log(result.data);
setUserField(result.data)
}catch(err){
console.log("Something Wrong");
}
}
const changeUserFieldHandler = (e) => {
setUserField({
...userField,
[e.target.name]: e.target.value
});
console.log(userField);
}
const onSubmitChange = async (e) => {
e.preventDefault();
try {
await axios.put("http://localhost:3000/update/"+id, userField);
window.location.href = '/';
} catch (err) {
console.log("Something Wrong");
}
}
return (
<div className="max-w-md mx-auto mt-5">
<h1 className="text-2xl text-center mb-2">Edit Form</h1>
<form>
<div className="mb-3 mt-3">
<label className="block text-sm font-medium text-gray-900"> ID:</label>
<input type="text" id="id" name="id" value={id} disabled />
</div>
<div className="mb-3 mt-3">
<label className="block text-sm font-medium text-gray-900"> Full Name:</label>
<input type="text" className="input input-bordered input-primary w-full max-w-xs" placeholder="Enter Your Full Name" name="name" value={userField.name} onChange={e => changeUserFieldHandler(e)} />
</div>
<div className="mb-3 mt-3">
<label className="block text-sm font-medium text-gray-900">Email:</label>
<input type="email" className="input input-bordered input-primary w-full max-w-xs" id="email" placeholder="Enter email" name="email" value={userField.email} onChange={e => changeUserFieldHandler(e)}/>
</div>
<div className="mb-3 mt-3">
<label className="block text-sm font-medium text-gray-900">Age:</label>
<input type="text" className="input input-bordered input-primary w-full max-w-xs" id="age" placeholder="Enter age" name="age" onChange={e => changeUserFieldHandler(e)} required/>
</div>
<button type="submit" className="btn btn-primary" onClick={e=>onSubmitChange(e)}>Update</button>
</form>
</div>
);
}
app\user\view\[id]\page.tsx
//app\user\view\[id]\page.tsx
"use client";
import React, { useState, useEffect } from 'react';
import axios from 'axios' //npm install axios https://www.npmjs.com/package/axios
import Link from "next/link";
import { useParams } from 'next/navigation'
export default function ViewUserPage() {
const {id}=useParams();
console.log(id);
const[user,setUser]=useState([]);
useEffect(()=>{
fetchUser();
},[id]);
const fetchUser=async()=>{
try{
const result=await axios.get("http://localhost:3000/get/"+id);
console.log(result.data);
setUser(result.data)
}catch(err){
console.log("Something Wrong");
}
}
return (
<div className="max-w-2xl mx-auto mt-5">
<h1 className="text-2xl text-center mb-2">View User</h1>
<table className="table table-zebra">
<thead className="text-sm text-gray-700 uppercase bg-gray-50">
<tr>
<th>S No.</th>
<th>Full Name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<tr>
<td>{user._id}</td>
<td>{user.name}</td>
<td>{user.email}</td>
</tr>
</tbody>
</table>
</div>
);
}
run C:\nextjs>npm run dev 