MERN Tutorial Day 1

MERN Tutorial Day 1

MongoDB Account Creation using following link
Account Creation using: https://www.mongodb.com/atlas/database
NodeJS Download : https://nodejs.org/en/download 

node -v

npm -v
Download : https://code.visualstudio.com/download 
var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World!');
}).listen(8080);
http://localhost:8080/
npm i express
var express = require('express');
var app = express();

app.get('/', function(req, res){
   res.send("Hello world!");
});

app.listen(process.env.PORT || 8080);
npm i mongoose
const express = require('express')
const mongoose = require('mongoose')

const app = express()
const PORT = process.env.PORT || 3500
 
app.listen(PORT, () => console.log('Server is running'))

mongoose.set("strictQuery", false);
const mongoDB = "mongodb+srv://computeradarsh:ABCD1234@cluster0.fuixeom.mongodb.net/";

main().catch((err) => console.log(err));

async function main() {
  await mongoose.connect(mongoDB);
}
let mongoose = require('mongoose');

let userSchema = new mongoose.Schema({
    umid: String,
    uname: String,
    umobile: String,
    uemail: String,
    upassword: String 
});

module.exports = mongoose.model('User', userSchema);
app.get('/userregister', function(req, res){
  
  let u1 = new usermodel({
    umid: req.query['umid'],
    uname: req.query['uname'],
    umobile: req.query['umobile'],
    uemail: req.query['uemail'],
    upassword: req.query['upassword']
  });
  
  u1
    .save()
    .then((doc) => {
      console.log(doc);
    })
    .catch((err) => {
      console.error(err);
      res.send('error')
    });
  
  res.send("register")
});
app.get('/userlogin', async function(req, res){
  try{
    const items = await usermodel.find({"umobile":req.query['mobile'],"upassword":req.query['password']}).lean().exec(); 
    res.json({items});
} catch(err) {
   res.send("error")
}
});
let mongoose = require('mongoose');

let taskSchema = new mongoose.Schema({
    tmid: String,
    umid: String,
    tdate: String,
    tstatus: String,
    ttitle: String 
});

module.exports = mongoose.model('Task', taskSchema);
app.get("/taskpending", async (req,res)=>{
  res.setHeader('Access-Control-Allow-Origin', '*');
  try{
      const item = await taskmodel.find({"tstatus":"pending"}).lean().exec(); 
      res.json(item);
  } catch(err) {
     res.send("error")
  }
});
app.get('/taskcompleted', async function(req, res){
  res.setHeader('Access-Control-Allow-Origin', '*');

  try{
    const items = await taskmodel.find({"tstatus":"completed"}).lean().exec(); // .exec() returns a true Promise
    res.json(items);
} catch(err) {
   res.send("error")
}
})

app.get('/taskadd', function(req, res){

  let t1 = new taskmodel({
    tmid: req.query['tmid'],
    umid: req.query['umid'],
    tdate: req.query['tdate'],
    tstatus: req.query['tstatus'],
    ttitle: req.query['ttitle']
  });

  
  t1
    .save()
    .then((doc) => {
      console.log(doc);
      //res.send(doc)
    })
    .catch((err) => {
      console.error(err);
      res.send('error')
    });

  res.send("taskadd")
});
npx create-react-app my-react-app
cd my-react-app
npm start
http://localhost:3000/
npm i -D react-router-dom
import ReactDOM from "react-dom/client";
import { BrowserRouter, Routes, Route } from "react-router-dom";
import Layout from "./Layout";
import NoPage from "./NoPage";

import Login from "./Login";
import AddTask from "./AddTask";
import Pending from "./Pending";
import Completed from "./Completed";

export default function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Layout />}>
          <Route index element={<Login />} />
          <Route path="Pending" element={<Pending />} />
          <Route path="Completed" element={<Completed />} />
          <Route path="AddTask" element={<AddTask />} />
          <Route path="*" element={<NoPage />} />
        </Route>
      </Routes>
    </BrowserRouter>
  );
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);
import { Outlet, Link } from "react-router-dom";

const Layout = () => {
  return (
    <>
      <nav>
        <ul>
          <li>
            <Link to="/">Home</Link>
          </li>
          <li>
            <Link to="/Pending">Pending Tasks</Link>
          </li>
          <li>
            <Link to="/Completed">Completed Tasks</Link>
          </li>
          <li>
            <Link to="/Addtask">Add Task</Link>
          </li>
        </ul>
      </nav>

      <Outlet />
    </>
  )
};

export default Layout;
import { useState, useEffect } from "react";

const Pending = () => {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch("http://localhost:3500/taskpending")
      .then((res) => res.json())
      .then((data) => setData(data));
  }, []);

  return (
    <> 
    
      <h2> Pending Tasks </h2>
      {data && data.map((item) => { return <li>{item.ttitle}</li>; })}
    </>
  );
};

export default Pending;
import { useState, useEffect } from "react";

const Completed = () => {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch("http://localhost:3500/taskcompleted")
      .then((res) => res.json())
      .then((data) => setData(data));
  }, []);

  return (
    <> 
    
      <h2> Completed Tasks </h2>
      {data && data.map((item) => { return <li>{item.ttitle}</li>; })}
    </>
  );
};

export default Completed;
const PageNotFound = () => {
    return <h1>404</h1>;
  };
  
  export default PageNotFound;

function AddTask() {
  return (
    <div className="App">
      
      <h2>Add New Task</h2>

      <form method="get" action="/AddTask2">

        <label for="ttitle">Task Title</label><br/>
        <input type="text" id="ttitle" name="ttitle" /><br/>
    
        <input type="submit" value="Go"/>
        
      </form>

    </div>
  );
}

export default AddTask;
npm start
import logo from './logo.svg';
//import './App.css';

import { useState, useEffect } from "react";
import ReactDOM from "react-dom/client";

function Login() {
  return (
    <div className="App">
      
      <h2>Login</h2>

      <form method="get" action="/Pending">

        <label for="umobile">Mobile</label><br/>
        <input type="text" id="umobile" name="umobile" /><br/>
        
        <label for="upass">Password:</label><br/>
        <input type="password" id="upass" name="upass"/><br/>
        
        <input type="submit" value="Go"/>
        
      </form>

    </div>
  );
}

export default Login;
npm install react-hook-form