Nodejs 101


2021/6/1 JS Node

Nodejs 101 CRUD basic sample using express

pre request npm install express npm install joi

// this is a basic demo for http CRUD using express
// including joi validation

const express = require("express");
const Joi = require("joi");
const app = express();
app.use(express.json());

const courses = [
  { id: 1, name: "course 1" },
  { id: 2, name: "course 2" },
  { id: 3, name: "course 3" },
];

app.get("/", (req, res) => {
  res.send("Hi There, welcome .Home Page");
});
app.get("/api/courses", (req, res) => {
  res.send(courses);
});
app.get("/api/courses/:id", (req, res) => {
  const course = courses.find((c) => c.id === parseInt(req.params.id));
  if (!course) return res.status(404).send("Not found!");
  res.send(course);
  //   res.send(req.params.id);
});

app.post("/api/courses", async (req, res) => {
  const schema = Joi.object({
    name: Joi.string().min(3).required(),
  });

  const result = schema.validate(req.body);

  if (result.error) {
    res.status(400).send(result.error.details[0].message);
    return;
  }
  console.log(result);
  const course = {
    id: courses.length + 1,
    ...result.value,
  };
  courses.push(course);
  res.send(course);

  //   try {
  //     const result = await schema.validateAsync(req.body);
  //     console.log(result);
  //     const course = {
  //       id: courses.length + 1,
  //       ...result,
  //     };
  //     courses.push(course);
  //     res.send(course);
  //   } catch (err) {
  //     res.status(400).send(err.details[0].message);
  //     return;
  //   }
  //   console.log("test");
  //   if (!req.body.name || req.body.name.length < 3) {
  //     res.status(400).send("Name is required and shoudl be minimum 3 characters");
  //     return;
  //   }
});

app.get("/api/courses/:year/:month", (req, res) => {
  //   res.send(req.params);
  res.send(req.query);
});

app.put("/api/courses/:id", (req, res) => {
  // find
  const course = courses.find((c) => c.id === parseInt(req.params.id));
  if (!course) return res.status(404).send("Not found!");
  // validate
  const schema = Joi.object({
    name: Joi.string().min(3).required(),
  });

  const result = schema.validate(req.body);
  //   console.log(result);
  if (result.error) {
    res.status(400).send(result.error.details[0].message);
    return;
  }
  //update the course
  course.name = req.body.name;

  //return
  res.send(course.name);
});

// function courseValidate(body) {

// }

app.delete("/api/courses/:id", (req, res) => {
  // find
  const course = courses.find((c) => c.id === parseInt(req.params.id));
  if (!course) return res.status(404).send("Not found!");
  // Delete
  const index = courses.indexOf(course);
  courses.splice(index, 1);
  res.send(course);
});

//PORT
const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Listening on port ${port}...`));




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
Last Updated: 12/23/2021, 2:26:38 PM