Skip to content

Commit 0c30bfc

Browse files
committed
[ADD] Express js
1 parent e29ed8b commit 0c30bfc

File tree

14 files changed

+1526
-82
lines changed

14 files changed

+1526
-82
lines changed

api/.gitkeep

Whitespace-only changes.

api/posts.json

Lines changed: 602 additions & 0 deletions
Large diffs are not rendered by default.

api/user.json

Whitespace-only changes.

api/users.json

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
{
2+
"page": 2,
3+
"per_page": 6,
4+
"total": 12,
5+
"total_pages": 2,
6+
"data": [
7+
{
8+
"id": 7,
9+
"email": "michael.lawson@reqres.in",
10+
"first_name": "Michael",
11+
"last_name": "Lawson",
12+
"avatar": "https://reqres.in/img/faces/7-image.jpg"
13+
},
14+
{
15+
"id": 8,
16+
"email": "lindsay.ferguson@reqres.in",
17+
"first_name": "Lindsay",
18+
"last_name": "Ferguson",
19+
"avatar": "https://reqres.in/img/faces/8-image.jpg"
20+
},
21+
{
22+
"id": 9,
23+
"email": "tobias.funke@reqres.in",
24+
"first_name": "Tobias",
25+
"last_name": "Funke",
26+
"avatar": "https://reqres.in/img/faces/9-image.jpg"
27+
},
28+
{
29+
"id": 10,
30+
"email": "byron.fields@reqres.in",
31+
"first_name": "Byron",
32+
"last_name": "Fields",
33+
"avatar": "https://reqres.in/img/faces/10-image.jpg"
34+
},
35+
{
36+
"id": 11,
37+
"email": "george.edwards@reqres.in",
38+
"first_name": "George",
39+
"last_name": "Edwards",
40+
"avatar": "https://reqres.in/img/faces/11-image.jpg"
41+
},
42+
{
43+
"id": 12,
44+
"email": "rachel.howell@reqres.in",
45+
"first_name": "Rachel",
46+
"last_name": "Howell",
47+
"avatar": "https://reqres.in/img/faces/12-image.jpg"
48+
}
49+
],
50+
"support": {
51+
"url": "https://contentcaddy.io?utm_source=reqres&utm_medium=json&utm_campaign=referral",
52+
"text": "Tired of writing endless social media content? Let Content Caddy generate it for you."
53+
}
54+
}

api/users/2.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"data": {
3+
"id": 2,
4+
"email": "janet.weaver@reqres.in",
5+
"first_name": "Janet",
6+
"last_name": "Weaver",
7+
"avatar": "https://reqres.in/img/faces/2-image.jpg"
8+
},
9+
"support": {
10+
"url": "https://contentcaddy.io?utm_source=reqres&utm_medium=json&utm_campaign=referral",
11+
"text": "Tired of writing endless social media content? Let Content Caddy generate it for you."
12+
}
13+
}

app.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#!/usr/bin/env node
2+
'use strict';
3+
4+
const path = require('path');
5+
const express = require('express');
6+
const compression = require('compression');
7+
const apicache = require('apicache');
8+
9+
const logger = require('#module/logger.js');
10+
const homeRoute = require('#route/home.js');
11+
const apiRoute = require('#route/api.js');
12+
const notFoundRoute = require('#route/notfound.js');
13+
14+
const PORT = parseInt(process.env.PORT, 10) || 3001;
15+
const publicDir = path.join(__dirname, 'public');
16+
const app = express();
17+
let cache = apicache.middleware;
18+
19+
function handleLog(req, res, next) {
20+
logger.info(`<- ${req.method} ${req.url}`);
21+
next();
22+
}
23+
24+
function handleHeaders(req, res, next) {
25+
res.setHeader('X-Content-Type-Options', 'nosniff');
26+
res.setHeader('X-Frame-Options', 'DENY');
27+
res.setHeader('X-XSS-Protection', '1; mode=block');
28+
next();
29+
}
30+
31+
app.use(cache('5 minutes'));
32+
app.use(express.static(publicDir));
33+
app.use(express.json());
34+
app.use(compression())
35+
app.use(handleLog);
36+
app.use(handleHeaders);
37+
app.use('/', homeRoute);
38+
app.use('/api/', apiRoute);
39+
app.use('*', notFoundRoute);
40+
41+
app.listen(PORT, () => {
42+
console.log(`> Running on localhost:${PORT}`);
43+
});

index.js

Lines changed: 0 additions & 39 deletions
This file was deleted.

module/fs.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#!/usr/bin/env node
2+
'use strict';
3+
4+
const path = require('path');
5+
const fs = require('fs');
6+
const logger = require('#module/logger.js');
7+
8+
const apiBaseDir = path.resolve('api');
9+
10+
function getFile(targetDir) {
11+
try {
12+
const data = fs.readFileSync(targetDir, 'utf8');
13+
return JSON.parse(data);
14+
} catch (error) {
15+
logger.error(`Error reading file: `, error);
16+
}
17+
}
18+
19+
function getFiles(targetDir = apiBaseDir) {
20+
const fileList = [];
21+
22+
function explore(directory) {
23+
try {
24+
if (!fs.existsSync(directory)) return;
25+
const entries = fs.readdirSync(directory, { withFileTypes: true });
26+
27+
for (const entry of entries) {
28+
const entryPath = path.resolve(directory, entry.name);
29+
30+
if (entry.isDirectory()) {
31+
explore(entryPath);
32+
} else if (entry.isFile()) {
33+
const getParentDir = entry.path.replace(path.resolve('api'), '');
34+
fileList.push({
35+
name: entry.name.split('.')[0],
36+
path: entryPath,
37+
parentPath: getParentDir
38+
});
39+
}
40+
}
41+
} catch (error) {
42+
logger.error(`Error exploring directory-> ${directory}`, error);
43+
}
44+
}
45+
46+
explore(targetDir);
47+
return fileList;
48+
}
49+
50+
module.exports.getFiles = getFiles;
51+
module.exports.getFile = getFile;

module/logger.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
#!/usr/bin/env node
2+
'use strict';
3+
14
const pino = require('pino');
25

36
const logger = pino({
@@ -9,4 +12,4 @@ const logger = pino({
912
},
1013
});
1114

12-
module.exports = logger;
15+
module.exports = logger;

0 commit comments

Comments
 (0)