added ts files
This commit is contained in:
26
node/express/getting-started/app.ts
Normal file
26
node/express/getting-started/app.ts
Normal file
@@ -0,0 +1,26 @@
|
||||
import express, { Request, Response, NextFunction } from 'express';
|
||||
|
||||
const app = express();
|
||||
const port = 3000;
|
||||
|
||||
|
||||
interface Product {
|
||||
name: string;
|
||||
price: number;
|
||||
brand: string;
|
||||
};
|
||||
|
||||
const getProducts = (request: Request, response: Response, next: NextFunction) => {
|
||||
let products: Product[] = [
|
||||
{"name":"television", "price":112.34, "brand":"samsung"},
|
||||
{"name":"washing machine", "price": 345.34, "brand": "LG"},
|
||||
{"name":"Macbook", "price": 3454.34, "brand": "Apple"}
|
||||
]
|
||||
|
||||
response.status(200).json(products);
|
||||
}
|
||||
app.get('/products', getProducts);
|
||||
|
||||
app.listen(port, () => {
|
||||
console.log(`Server listening at port ${port}.`);
|
||||
});
|
||||
@@ -1,17 +1,18 @@
|
||||
// errormiddleware.js
|
||||
const errorLogger = (err, req, res, next) => {
|
||||
const errorLogger = (err, request, response, next) => {
|
||||
console.log( `error ${err.message}`)
|
||||
next(err) // calling next middleware
|
||||
}
|
||||
|
||||
const errorResponder = (err, req, res, next) => {
|
||||
res.header("Content-Type", 'application/json')
|
||||
const errorResponder = (err, request, response, next) => {
|
||||
response.header("Content-Type", 'application/json')
|
||||
|
||||
res.status(err.statusCode).send(err.message)
|
||||
const status = err.status || 400
|
||||
response.status(status).send(err.message)
|
||||
}
|
||||
const invalidPathHandler = (req, res, next) => {
|
||||
res.status(400)
|
||||
res.send('invalid path')
|
||||
const invalidPathHandler = (request, response, next) => {
|
||||
response.status(400)
|
||||
response.send('invalid path')
|
||||
}
|
||||
|
||||
module.exports = { errorLogger, errorResponder, invalidPathHandler }
|
||||
|
||||
@@ -2,14 +2,14 @@ const express = require('express');
|
||||
|
||||
const app = express();
|
||||
|
||||
const requestLogger = (req, res, next) => {
|
||||
console.log(req);
|
||||
const requestLogger = (request, response, next) => {
|
||||
console.log(request);
|
||||
next();
|
||||
};
|
||||
|
||||
const requireJsonContent = (req, res, next) => {
|
||||
if (req.headers['content-type'] !== 'application/json') {
|
||||
res.status(400).send('Server requires application/json')
|
||||
const requireJsonContent = (request, response, next) => {
|
||||
if (request.headers['content-type'] !== 'application/json') {
|
||||
response.status(400).send('Server requires application/json')
|
||||
} else {
|
||||
next()
|
||||
}
|
||||
@@ -17,17 +17,9 @@ const requireJsonContent = (req, res, next) => {
|
||||
|
||||
app.use(requestLogger);
|
||||
|
||||
const myErrorHandler = (err, req, res, next) => {
|
||||
if (req.foo) {
|
||||
res.status(500).send('Fail!');
|
||||
}else {
|
||||
next(err);
|
||||
}
|
||||
};
|
||||
|
||||
app.use(myErrorHandler);
|
||||
app.use((err, req, res, next) => {
|
||||
res.status(500).send('Error!')
|
||||
app.use((err, request, response, next) => {
|
||||
response.status(500).send('Error!')
|
||||
})
|
||||
|
||||
// Set the body size limit to 100 bytes
|
||||
@@ -41,18 +33,18 @@ let products = [{"name":"television", "price":112.34, "brand":"samsung"},
|
||||
|
||||
|
||||
// handle get request for path /
|
||||
app.get('/', (req, res) => {
|
||||
res.send('response for GET request');
|
||||
app.get('/', (request, response) => {
|
||||
response.send('response for GET request');
|
||||
});
|
||||
|
||||
// handle get request for path /products
|
||||
app.get('/products', (req, res) => {
|
||||
app.get('/products', (request, response) => {
|
||||
|
||||
res.json(products);
|
||||
response.json(products);
|
||||
});
|
||||
|
||||
// handle get request for path /products
|
||||
app.get('/products/:brand', (req, res) => {
|
||||
app.get('/products/:brand', (request, response) => {
|
||||
|
||||
const brand = req.params.brand;
|
||||
|
||||
@@ -60,11 +52,11 @@ app.get('/products/:brand', (req, res) => {
|
||||
|
||||
const productsFiltered = products.filter(product=> product.brand == brand);
|
||||
|
||||
res.json(productsFiltered);
|
||||
response.json(productsFiltered);
|
||||
});
|
||||
|
||||
// handle post request for path /products
|
||||
app.post('/products', requireJsonContent, (req, res) => {
|
||||
app.post('/products', requireJsonContent, (request, response) => {
|
||||
const products = [];
|
||||
|
||||
const name = req.body.name ;
|
||||
@@ -76,31 +68,31 @@ app.post('/products', requireJsonContent, (req, res) => {
|
||||
products.push({name: req.body.name, brand: req.body.brand, price: req.body.price});
|
||||
|
||||
const productCreationResponse = {productID: "12345", result: "success"};
|
||||
res.json(productCreationResponse);
|
||||
response.json(productCreationResponse);
|
||||
});
|
||||
|
||||
app.set('view engine', 'pug')
|
||||
app.set('views', './views')
|
||||
app.get('/home', (req, res) => {
|
||||
res.render("home", { title: "Home", message: "My home page" , sysdate: new Date().toLocaleString()})
|
||||
app.get('/home', (request, response) => {
|
||||
response.render("home", { title: "Home", message: "My home page" , sysdate: new Date().toLocaleString()})
|
||||
})
|
||||
|
||||
|
||||
// handle get request with 3 middleware functions
|
||||
app.get('/users', (req, res, next) => {
|
||||
app.get('/users', (request, response, next) => {
|
||||
console.log("Stage 1 processing ");
|
||||
next()
|
||||
},
|
||||
(req, res, next) => {
|
||||
(request, response, next) => {
|
||||
console.log("Stage 2 processing ");
|
||||
next();
|
||||
},
|
||||
(req, res) => {
|
||||
res.send('response for GET request');
|
||||
(request, response) => {
|
||||
response.send('response for GET request');
|
||||
});
|
||||
|
||||
|
||||
app.get('/products/error', (req, res) => {
|
||||
app.get('/products/error', (request, response) => {
|
||||
throw new Error("processing error!")
|
||||
});
|
||||
// start the server
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
// middleware.js
|
||||
|
||||
const requestLogger = (req, res, next) => {
|
||||
console.log(req);
|
||||
const requestLogger = (request, response, next) => {
|
||||
console.log(request);
|
||||
next();
|
||||
};
|
||||
|
||||
const requireJsonContent = (req, res, next) => {
|
||||
if (req.headers['content-type'] !== 'application/json') {
|
||||
res.status(400).send('Server requires application/json')
|
||||
const requireJsonContent = (request, response, next) => {
|
||||
if (request.headers['content-type'] !== 'application/json') {
|
||||
response.status(400).send('Server requires application/json')
|
||||
} else {
|
||||
next()
|
||||
}
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"serve": "nodemon app.ts"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
@@ -12,5 +13,12 @@
|
||||
"dependencies": {
|
||||
"express": "^4.17.2",
|
||||
"pug": "^3.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/express": "^4.17.13",
|
||||
"@types/node": "^17.0.17",
|
||||
"nodemon": "^2.0.15",
|
||||
"ts-node": "^10.5.0",
|
||||
"typescript": "^4.5.5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,59 +12,60 @@ let products = [{"name":"television", "price":112.34, "brand":"samsung"},
|
||||
{"name":"Macbook", "price": 3454.34, "brand": "Apple"}];
|
||||
|
||||
// handle get request for path /products
|
||||
router.get('/products', (req, res) => {
|
||||
res.json(products);
|
||||
router.get('/products', (request, response) => {
|
||||
console.log(products)
|
||||
response.json(products)
|
||||
});
|
||||
|
||||
// handle get request for path /products
|
||||
router.get('/products/:brand', (req, res) => {
|
||||
router.get('/products/:brand', (request, response) => {
|
||||
|
||||
const brand = req.params.brand;
|
||||
const brand = request.params.brand;
|
||||
|
||||
console.log(`brand ${brand} `);
|
||||
|
||||
const productsFiltered = products.filter(product=> product.brand == brand);
|
||||
|
||||
res.json(productsFiltered);
|
||||
response.json(productsFiltered);
|
||||
});
|
||||
|
||||
|
||||
// handle post request for path /products
|
||||
router.post('/products', requireJsonContent,(req, res) => {
|
||||
router.post('/products', requireJsonContent,(request, response) => {
|
||||
|
||||
const name = req.body.name ;
|
||||
const name = request.body.name ;
|
||||
|
||||
const brand = req.body.brand;
|
||||
const brand = request.body.brand;
|
||||
|
||||
console.log(name + " " + brand);
|
||||
|
||||
products.push({name: req.body.name, brand: req.body.brand, price: req.body.price});
|
||||
products.push({name: request.body.name, brand: request.body.brand, price: request.body.price});
|
||||
|
||||
const productCreationResponse = {productID: "12345", result: "success"};
|
||||
res.json(productCreationResponse);
|
||||
response.json(productCreationResponse);
|
||||
});
|
||||
|
||||
// handle put request for path /products
|
||||
router.put('/products', (req, res) => {
|
||||
router.put('/products', (request, response) => {
|
||||
|
||||
const name = req.body.name ;
|
||||
const name = request.body.name ;
|
||||
|
||||
const brand = req.body.brand;
|
||||
const brand = request.body.brand;
|
||||
|
||||
console.log(name + " " + brand);
|
||||
|
||||
products.push({name: req.body.name, brand: req.body.brand, price: req.body.price});
|
||||
products.push({name: request.body.name, brand: request.body.brand, price: request.body.price});
|
||||
|
||||
const productCreationResponse = {productID: "12345", result: "success"};
|
||||
res.json(productCreationResponse);
|
||||
response.json(productCreationResponse);
|
||||
})
|
||||
|
||||
router.get('/home', (req, res) => {
|
||||
router.get('/home', (request, response) => {
|
||||
console.log("rendering...")
|
||||
res.render("home", { title: "Home", message: "My home page" , sysdate: new Date().toLocaleString()})
|
||||
response.render("home", { title: "Home", message: "My home page" , sysdate: new Date().toLocaleString()})
|
||||
})
|
||||
|
||||
router.get('/productswitherror', (req, res) => {
|
||||
router.get('/productswitherror', (request, response) => {
|
||||
let err = new Error("processing error ")
|
||||
err.statusCode = 400
|
||||
throw err
|
||||
|
||||
8
node/express/getting-started/tsconfig.json
Normal file
8
node/express/getting-started/tsconfig.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"target": "es6",
|
||||
"rootDir": "./",
|
||||
"esModuleInterop": true
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user