Client-side versus Server-side
- Client-side—(front-end) refers to the code you write that results in something the user sees in his web browser. Client-side code typically includes JavaScript used to animate the user experience when a web page is loaded.
- Server-side—(back-end) refers to code used for application logic (how data is organized and saved to the database). Server-side code is responsible for authenticating users on a login page, running scheduled tasks, and even ensuring that the client-side code reaches the client.
RELP(Read-Evaluate-Print Loop)
Begin
1
2
3
| npm init
npm i http-status-codes -S
# to save the http-status-codes package as an application dependency.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| const port = 3000,
http = require("http"),
httpStatus = require("http-status-codes"),
app = http.createServer((request, response) => {
console.log("Received an incoming request!");
response.writeHead(httpStatus.OK, {
"Content-Type": "text/html"
});
let responseMessage = "<h1>Hello, Universe!</h1>";
response.write(responseMessage);
response.end();
console.log(`Sent a response : ${responseMessage}`);
});
app.listen(port);
console.log(`The server has started and is listening on port number:
${port}`);
|
Handling incoming data
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| const port = 3000,
http = require("http"),
httpStatus = require("http-status-codes"),
app = http.createServer();
app.on("request", (req, res) => {
res.writeHead(httpStatus.OK, {
"Content-Type": "text/html"
});
let responseMessage = "<h1>This will show on the screen.</h1>";
res.end(responseMessage);
});
app.listen(port);
console.log(`The server has started and is listening on port number:
${port}`);
|
Simple server example in main.js
1
2
3
4
5
6
7
8
9
10
11
12
| const port = 3000,
http = require("http"),
httpStatus = require("http-status-codes"),
app = http
.createServer((req, res) => {
res.writeHead(httpStatus.OK, {
"Content-Type": "text/html"
});
let responseMessage = "<h1>Welcome!</h1>";
res.end(responseMessage);
})
.listen(port);
|
A web server with specific routes for each file in your project
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
| const sendErrorResponse = res => {
res.writeHead(httpStatus.NOT_FOUND, {
"Content-Type": "text/html"
});
res.write("<h1>File Not Found!</h1>");
res.end();
};
http
.createServer((req, res) => {
let url = req.url;
if (url.indexOf(".html") !== -1) {
res.writeHead(httpStatus.OK, {
"Content-Type": "text/html"
});
customReadFile(`./views${url}`, res);
} else if (url.indexOf(".js") !== -1) {
res.writeHead(httpStatus.OK, {
"Content-Type": "text/javascript"
});
customReadFile(`./public/js${url}`, res);
} else if (url.indexOf(".css") !== -1) {
res.writeHead(httpStatus.OK, {
"Content-Type": "text/css"
});
customReadFile(`./public/css${url}`, res);
} else if (url.indexOf(".png") !== -1) {
res.writeHead(httpStatus.OK, {
"Content-Type": "image/png"
});
customReadFile(`./public/images${url}`, res);
} else {
sendErrorResponse(res);
}
})
.listen(3000);
console.log(`The server is listening on port number: ${port}`);
const customReadFile = (file_path, res) => {
if (fs.existsSync(file_path)) {
fs.readFile(file_path, (error, data) => {
if (error) {
console.log(error);
sendErrorResponse(res);
return;
}
res.write(data);
res.end();
});
} else {
sendErrorResponse(res);
}
};
|
Application directory structure
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| .
|____main.js
|____router.js
|____public
| |____css
| | |____confetti_cuisine.css
| | |____bootstrap.css
| |____images
| | |____product.jpg
| | |____graph.png
| | |____cat.jpg
| | |____people.jpg
| |____js
| | |____confettiCuisine.js
|____package-lock.json
|____package.json
|____contentTypes.js
|____utils.js
|____views
| |____index.html
| |____contact.html
| |____courses.html
| |____thanks.html
| |____error.html
|
Setting up an app with Express.js
1
| npm install express --save
|
Using MVC
express-generator provides some boilerplate code for an application. This tool offers scaffolding (prebuilt folders, modules, and configurations)
1
| npm install express-generator -g
|
1
| npm install express ejs --save
|