1.第一版本,读取某个固定文件目录下的文件,写成接口
初版本1.1
缺点:文件更新了,接口不会更新
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
let path = require("path");
let fs = require("fs");
let http= require("http");
fs.readFile('./config.json', (err, data) => {
if (err) throw err;
let fileDir = JSON.parse(data.toString()).fileDirectory;
fs.readdir(fileDir,(err,files) => {
if(err) throw err;
let data = JSON.stringify({"data": files});
let serve = http.createServer((request, response) => {
response.writeHead(200, {
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json; charset=utf-8'
});
response.end(data);
});
serve.listen(5000);
console.log('http://127.0.0.1:5000');
});
})
|
2.第二版本
版本1.2,解决上面文件夹目录更新不刷新的问题
缺点:回调嵌套过深,建议采用Promise或者async/await写法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
let path = require("path");
let fs = require("fs");
let http= require("http");
let serve = http.createServer((request, response) => {
response.writeHead(200, {
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json; charset=utf-8'
});
fs.readFile('./config.json', (err, data) => {
if (err) throw err;
let fileDir = JSON.parse(data.toString()).fileDirectory;
fs.readdir(fileDir,(err,files) => {
if(err) throw err;
let data = JSON.stringify({"data": files});
response.end(data);
});
})
});
serve.listen(5000);
console.log('http://127.0.0.1:5000');
|
3.第三版本
增加需求,可读取文件夹下的文件夹,文件夹下面还可以有文件夹,套娃结构,类似于编辑文档的功能
分析:存数据的数据类型如何设计
问题:node写的get接口用浏览器访问会默认请求两次,因为浏览器会请求图标
遇到问题,因为文件是异步读取的,而且因为是深层嵌套的,递归的,应该读取完成再发消息告诉读取方法外面,我读完了,但是现在因为是异步+递归的,好像没办法知道啥时候递归结束 暂时没想到办法判断啥时候递归结束了 ,所以说得把异步读取改成同步读取,但是如果文件夹结构很深的话,是不是会很慢呢,所以应该怎么做呢,异步读取,读一级返回一级,是不是应该这么做呢,这么做的话前端如何加载呢,有待思考。
异步读取代码半成品 因为写不下去了 但是这个异步读取等递归完,其实跟同步效果是一样的:
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
|
let fs = require("fs");
let http= require("http");
let serve = http.createServer((_, response) => {
response.writeHead(200, {
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json; charset=utf-8'
});
let filesAll = [];
fs.readFile('./config.json', (err, data) => {
if (err) throw err;
let pathfileDir = JSON.parse(data.toString()).fileDirectory;
function readFileDir(dir){
fs.readdir(dir,(err,files) => {
if(err) throw err;
files.forEach(item => {
if(fs.lstatSync((dir+'/'+item)).isDirectory()){
readFileDir((dir+'/'+item));
}else{
filesAll.push(item);
}
})
});
}
readFileDir(pathfileDir);
// let data = JSON.stringify({"data": filesAll});
response.end('');
})
});
serve.listen(5000);
console.log('http://127.0.0.1:5000');
|
4.第四版本
将端口提取出来,并打包成windows,linux,mac平台可直接执行的文件
待做,将代码改成Promise或async/await形式
1
2
3
4
|
{
"fileDirectory": "E:/GIS项目视频资料/读文件",
"port": "5000"
}
|
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
|
let fs = require("fs");
let http= require("http");
let configData = fs.readFileSync('./config.json');
let pathfileDir = JSON.parse(configData.toString()).fileDirectory;
let port = JSON.parse(configData.toString()).port;
let serve = http.createServer((_, response) => {
response.writeHead(200, {
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json; charset=utf-8'
});
let filesAll = [];
function readFileDir(dir){
let filesDir = fs.readdirSync(dir);
filesDir.forEach(item => {
if(fs.lstatSync((dir+'/'+item)).isDirectory()){
readFileDir((dir+'/'+item));
}else{
filesAll.push(item);
}
})
}
readFileDir(pathfileDir);
let fileData = JSON.stringify({"data": filesAll});
response.end(fileData);
});
serve.listen(port);
console.log('http://127.0.0.1:'+port);
|