Express - Part-1
Express - Part-1
Ex 1:
const express = require("express");
const app = express();
/* http methods
app.get()
app.put()
app.post()
app.delete()
*/
res.send("hello world");
});
to set port on local machine: open cmd > set PORT=5000 > nodemon index.js
Route Parameters:
// ex: http://localhost:3000/api/courses/11
app.get("/api/courses/:id", (req, res) => {
res.send(req.params.id);
});
// ex: http://localhost:3000/api/courses/2018/feb
app.get("/api/courses/:year/:month", (req, res) => {
res.send(req.params); // params object
});
// ex: http://localhost:3000/api/courses?sortBy=name
app.get("/api/courses", (req, res) => {
res.send(req.query); // query string
});
// http://localhost:3000/users?name=decdier
app.get("/users", (req, res) => {
res.send(req.query.name);
});
// Creating a course
app.post(‘/api/courses’, (req, res) => {
// Create the course and return the course object
resn.send(course);
});
Input Validation
app.post("/api/courses", (req, res) => {
if (!req.body.name || req.body.name.length < 3) {
res.status(400).send("There was an error in the name property");
}
const course = {
id: courses.length + 1,
name: req.body.name,
};
courses.push(course);
res.send(courses);
});
if (result.error) {
res.status(400).send(result.error.details[0].message);
}
const course = {
id: courses.length + 1,
name: req.body.name,
};
courses.push(course);
res.send(courses);
});
if (error) {
res.status(400).send(error.details[0].message);
return;
}
// Updating a course
app.put(‘/api/courses/:id’, (req, res) => {
// If course not found, return 404, otherwise update it
// and return the updated object.
});
// Deleting a course
app.delete(‘/api/courses/:id’, (req, res) => {
// If course not found, return 404, otherwise delete it
// and return the deleted object.
});
Ex2:
app.use(express.json());
// the express.json() will return middleware function
// it will parse the req, if there was a body in the req , then it will set
req.body
Ex3:
Ex4:
- You can create custom middleware for cross-cutting concerns, such as logging,
authentication, etc.
Ex 3: router.param middleware
Express has a few built-in middleware functions:
app.use(helmet());
app.use(morgan("tiny"));
Environment:
- We can detect the environment in which our Node application is running
(development, production, etc) using process.env.NODE_ENV and
app.get(‘env’). - The config package gives us an elegant way to store
configuration settings for
our applications.
console.log(process.env.NODE_ENV); // undefined
console.log(app.get("env")); // by default development
/*
set NODE_ENV=production
*/
if (app.get("env") === "development") {
app.use(morgan("tiny"));
console.log("morgan enabled...");
}
Configuration:
// npm i config
const config = require("config");
Index.js
console.log("App name: " + config.get("name"));
console.log("mail: " + config.get("mail.host"));
console.log("App Password: " + config.get("mail.password"));
// set app_password=1234
Debugging:
// npm i debug
const startupDebbuger = require("debug")("app:startup");
const dbDebugger = require("debug")("app:db");
const morgan = require("morgan");
const express = require("express");
const app = express();
// some db work...
dbDebugger("Connected to db");
// set DEBUG=app:startup
// set DEBUG=app:db
// set DEBUG=app:*
Templating Engine:
- To return HTML markup to the client, use a templating engine. There are various
templating engines available out there. Pug, EJS and Mustache are the most
popular ones.
Ex1: pug
index.js
// npm i pug
const morgan = require("morgan");
const express = require("express");
const app = express();
Ex2: ejs
index.js
Database Integration:
https://expressjs.com/en/guide/database-integration.html
Middleware> logger.js
module.exports = log;
const genres = [
{ id: 1, genre: "Action" },
{ id: 2, genre: "Horror" },
{ id: 3, genre: "comedy" },
{ id: 4, genre: "sci-fi" },
];
router.use(express.json());
if (result.error)
return res.status(400).send(result.error.details[0].message);
genres.push({
id: genres.length + 1,
genre: result.value.genre,
});
res.send(genres);
});
if (result.error)
return res.status(400).send(result.error.details[0].message);
genres[genreIndex].genre = result.value.genre;
res.send(genres);
});
module.exports = router
module.exports = home
index.js
app.use(log);
app.use("/", home);
app.use("/api/genres", genres);