Skip to content

Commit c228f86

Browse files
committed
Update 'GET' method
it can be shown api list by a path url
1 parent 14ae69f commit c228f86

File tree

3 files changed

+85
-72
lines changed

3 files changed

+85
-72
lines changed

routes/findFile.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
var fs = require('fs');
2+
var path = require('path');
3+
4+
module.exports = {
5+
extJson : '.json',
6+
findFiles: function (startPath) {
7+
if (!fs.existsSync(startPath)){
8+
console.log("No file dir ", startPath);
9+
return;
10+
}
11+
12+
var fileNames = [];
13+
var files = fs.readdirSync(startPath);
14+
for(var i = 0; i < files.length; i++){
15+
var filename = path.join(startPath, files[i]);
16+
var stat = fs.lstatSync(filename);
17+
if (stat.isDirectory()) {
18+
fileNames = fileNames.concat(this.findFiles(filename));
19+
} else {
20+
filename = filename.replace('jsonFile', '');
21+
if (path.extname(filename) == this.extJson) {
22+
fileNames.push(filename);
23+
}
24+
}
25+
}
26+
return fileNames;
27+
},
28+
hierarchyFiles: function (files) {
29+
var hierarchyFile = {};
30+
for (var key in files) {
31+
var fileName = files[key];
32+
var topFolderName = fileName.match(/\/.*\//gi);
33+
34+
if (topFolderName) {
35+
topFolderName = topFolderName.toString();
36+
topFolderName = topFolderName.replace(/^\//, "");
37+
topFolderName = topFolderName.replace(/\/$/, "");
38+
} else {
39+
topFolderName = "/";
40+
}
41+
42+
if (!hierarchyFile[topFolderName]) {
43+
hierarchyFile[topFolderName] = [];
44+
}
45+
46+
hierarchyFile[topFolderName].push(fileName.replace(this.extJson, ''));
47+
}
48+
return hierarchyFile;
49+
}
50+
};

routes/index.js

Lines changed: 7 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,27 @@
11
var express = require('express');
22
var router = express.Router();
3-
var fs = require('fs');
4-
var path = require('path');
5-
var extJson = '.json';
3+
var ff = require('../routes/findFile');
64

75
/* GET json path list */
8-
router.get('/' + extJson, function(req, res, next) {
9-
var files = findFiles('./jsonFile');
6+
router.get('/' + ff.extJson, function(req, res, next) {
7+
var files = ff.findFiles('./jsonFile');
108

11-
res.json(hierarchyFiles(files));
9+
res.json(ff.hierarchyFiles(files));
1210
});
1311

1412
/* GET home page. */
1513
router.get('/', function(req, res, next) {
1614
var contentType = req.headers['content-type'];
17-
var files = findFiles('./jsonFile');
15+
var files = ff.findFiles('./jsonFile');
1816

1917
if (contentType == 'application/json') {
20-
res.json(hierarchyFiles(files));
18+
res.json(ff.hierarchyFiles(files));
2119
} else {
2220
res.render('index', {
2321
title : 'JSON API TEST SERVER',
24-
hierarchyFiles : hierarchyFiles(files)
22+
hierarchyFiles : ff.hierarchyFiles(files)
2523
});
2624
}
2725
});
2826

29-
function findFiles(startPath) {
30-
if (!fs.existsSync(startPath)){
31-
console.log("No file dir ", startPath);
32-
return;
33-
}
34-
35-
var fileNames = [];
36-
var files = fs.readdirSync(startPath);
37-
for(var i = 0; i < files.length; i++){
38-
var filename = path.join(startPath, files[i]);
39-
var stat = fs.lstatSync(filename);
40-
if (stat.isDirectory()) {
41-
fileNames = fileNames.concat(findFiles(filename));
42-
} else {
43-
filename = filename.replace('jsonFile', '');
44-
if (path.extname(filename) == extJson) {
45-
fileNames.push(filename);
46-
}
47-
}
48-
}
49-
return fileNames;
50-
}
51-
52-
function hierarchyFiles(files) {
53-
var hierarchyFile = {};
54-
for (var key in files) {
55-
var fileName = files[key];
56-
var topFolderName = fileName.match(/\/.*\//gi);
57-
58-
if (topFolderName) {
59-
topFolderName = topFolderName.toString();
60-
topFolderName = topFolderName.replace(/^\//, "");
61-
topFolderName = topFolderName.replace(/\/$/, "");
62-
} else {
63-
topFolderName = "/";
64-
}
65-
66-
if (!hierarchyFile[topFolderName]) {
67-
hierarchyFile[topFolderName] = [];
68-
}
69-
70-
hierarchyFile[topFolderName].push(fileName.replace(extJson, ''));
71-
}
72-
return hierarchyFile;
73-
}
74-
7527
module.exports = router;

routes/jsonFile.js

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,42 @@ var router = express.Router();
33
var fs = require('fs');
44
var path = require('path');
55
var url = require('url');
6+
var ff = require('../routes/findFile');
67

78
// get
89
router.get('/', function(req, res, next) {
910
var resultData;
10-
var filepath = getFilePathByRequest(req);
11+
var reqPath = getFilePathByRequest(req);
12+
var filePath = addExtNameJson(reqPath);
1113

1214
try {
13-
// filepath로 해당 파일을 찾은 경우 json으로 출력
14-
var fileString = fs.readFileSync(filepath, 'utf8');
15-
resultData = JSON.parse(fileString);
15+
if (fs.existsSync(reqPath) && fs.lstatSync(reqPath).isDirectory()) {
16+
resultData = ff.hierarchyFiles(ff.findFiles(reqPath));
17+
} else if (fs.existsSync(filePath) && fs.lstatSync(filePath).isFile()) {
18+
var fileString = fs.readFileSync(filePath, 'utf8');
19+
resultData = JSON.parse(fileString);
20+
} else {
21+
next();
22+
}
1623
} catch(e) {
1724
// console.log(e);
18-
next();
25+
var errorMessage = 'Fail Get';
26+
var err = new Error(errorMessage);
27+
err.status = 500;
28+
next(err);
1929
}
30+
2031
res.json(resultData);
2132
});
2233

2334
// delete
2435
router.delete('/', function(req, res, next) {
2536
var resultData;
26-
var filepath = getFilePathByRequest(req);
37+
var filePath = getFilePathByRequest(req);
38+
filePath = addExtNameJson(filePath);
2739

2840
try {
29-
fs.unlinkSync(filepath);
41+
fs.unlinkSync(filePath);
3042
resultData = 'Success Delete';
3143
} catch(e) {
3244
// console.log(e);
@@ -42,11 +54,12 @@ router.delete('/', function(req, res, next) {
4254
router.post('/', function(req, res, next) {
4355
var resultData;
4456
var json = req.body;
45-
var filepath = getFilePathByRequest(req);
57+
var filePath = getFilePathByRequest(req);
58+
filePath = addExtNameJson(filePath);
4659

4760
try {
48-
mkdirp(filepath);
49-
fs.writeFileSync(filepath, JSON.stringify(json), 'utf8');
61+
mkdirp(filePath);
62+
fs.writeFileSync(filePath, JSON.stringify(json), 'utf8');
5063
resultData = json;
5164
} catch(e) {
5265
// console.log(e);
@@ -60,31 +73,29 @@ router.post('/', function(req, res, next) {
6073

6174
function addExtNameJson(urlPath) {
6275
var resultPath;
63-
var extJson = '.json';
6476
var extname = path.extname(urlPath);
6577

6678
if (extname) {
67-
if (extname == extJson) {
79+
if (extname == ff.extJson) {
6880
resultPath = urlPath;
6981
} else {
70-
resultPath = urlPath.replace(extname, extJson);
82+
resultPath = urlPath.replace(extname, ff.extJson);
7183
}
7284
} else {
73-
resultPath = urlPath + extJson;
85+
resultPath = urlPath + ff.extJson;
7486
}
7587

7688
return resultPath;
7789
}
7890

7991
function getFilePathByRequest(req) {
8092
var urlPath = url.parse(req.originalUrl).pathname;
81-
urlPath = addExtNameJson(urlPath);
8293

8394
return path.join('./jsonFile', urlPath.toLowerCase());
8495
}
8596

86-
function mkdirp(filepath) {
87-
var dirname = path.dirname(filepath);
97+
function mkdirp(filePath) {
98+
var dirname = path.dirname(filePath);
8899
if (fs.existsSync(dirname)) {
89100
return true;
90101
}

0 commit comments

Comments
 (0)