前文我们已经聊过原生NodeJS如何打一个最简单的服务器,也就是nodejs http模块 在http篇咱们结尾作了一个小东西 - 详细文章地址:Nodejs-基础-httpjavascript
也就是这个,这里面我们直接用switch来判断请求的什么,那这个你们也都知道,若是东西多了,就写疯了, 并且,如今只能输入一个字符串,要是请求个图片或者视频,就不行了,固然了,base64也能够,不过。。。。。。那玩意体积不还大么,再说也有更好的方法,也就是我们今天说的——fs模块html
那么今天我就来聊一聊fs模块前端
功能:fs主要是读文件和写文件用的,用途很是广法也很是方便,也是系统自带的文件类型操做的模块java
说了那么多,具体怎么用呢,其实fs有不少不少方法,复制粘贴移动的,我们这里说两个主要而且经常使用的node
fs.readFile(文件名,function(err, data){}) —— 读文件 fs.writeFile(文件名,内容, function(err){}) —— 写文件webpack
这两个方法从名字都能看出来他俩是干哈得了,至于为何会有回调呢,可能会有人有疑问,回调回调的就回调地狱了,套不少层,很麻烦对不对 实际上是这样的,想象一下,服务器是同步仍是异步的(说了句废话),同步异步用最俗的话来讲就是异步一快跑同步等着前一个跑完,那么每一个readFile确定都须要一个回调,可是回调地狱怎么解决呢,前端同窗应该了解的比较多, async await promise 真香,事实上node 和 node框架express都有这个问题,就是项目容易回调地狱,这也就是为何express官方团队都受不了express了 又写了个koa,固然,express这些和node原生相关的库也都是有promise版或者有库能够统一转换的,这个不用担忧,之后的文章会提到web
好的,那让咱们直接来试试express
首先 建两个文件,像这样 promise
而后边写 fs.js
服务器
const fs = require('fs');
fs.readFile('./1.txt', (err, data) => {
if (err) {
console.log('读取失败');
return;
}
console.log(data);
});
复制代码
readFile 和 writeFile 的回调函数里都有两个参数,一个是err,一个是data,这个很好理解,一个是读文件失败缘由,一个就是真实读过来的数据
而后我们在1.txt里随便写点文字,像这样👇
这时候咱们运行fs文件 node fs.js
, 就会看到👇
Buffer 是原始二进制数据,看到这可能有人有疑问,为何我写的是文字,出来的也是二进制呢,直接给我不就完了么,是这样的,对于服务器来讲,单处理文本数据就好了?确定不行,还有一些图片视频无法直接展现的,因此统一全是二进制输出。 固然了,若是就是想看到文字,也是能够的直接toString()就能够,像这样👇
看了上面的例子,其实writeFile也是更没有什么了,这里就直接粘例子了
是否是很简单~
上篇文章http模块作了个例子
const http = require('http');
let server = http.createServer((req, res) => {
console.log(req.url);
switch (req.url) {
case '/1.html':
res.write('1.html');
break;
case '/2.html':
res.write('2.html');
break;
default:
res.write('404');
break;
}
res.end();
});
// 监听端口
server.listen(5000);
复制代码
我们直接改造一下这个,请求文件的时候直接从一个文件夹内去找,找到了给你,找不到就直接返回404 既然如此,我们能够看一下 asmp是怎么作的,他就是把这些文件放到www目录的,好的,那我们也来建一个www 名字随便,习惯而已 稍微缕一缕思路
好的,有了这个思想,我们改造一下这个代码
const http = require('http');
const fs = require('fs');
let server = http.createServer((req, res) => {
if (req.url == '/favicon.ico') {
return;
}
let file_name = './www' + req.url;
console.log(file_name);
fs.readFile(file_name, (err, data) => {
if (err) {
res.write('404');
} else {
res.write(data);
}
res.end();
});
});
server.listen(5000);
复制代码
而后www下随便建两个index.html,甚至放点图片或者视频
http://localhost:5000/index.html
到这为止已经能够直接返回静态文件了,可是这对服务器来讲仍是远远不够的,由于最起码的请求处理什么get、post 上传文件视频什么的,我们下篇文章就来讲一说数据get请求处理
有什么感兴趣的,或者遇到什么问题能够直接加我好友,我们一块儿沟通
微信:Dyy916829411 qq: 916829411