nodejs实现简单web服务

nodejs中可以利用fs模块制作一个简单的可以运行html,css,javascript…可以下载文件的简单服务器
1.关于fs.readFile
nodejs中 readFile方法是异步的读取文件的内容 读取的内容返回为buffer一般用tostring转换为字符串
格式为fs.readFile(‘xxxx/xxx’’, (err, data) => {
if (err) throw err;
console.log(data);
});
第一个参数为路径,err,data是形式参数,分别为Error类型,代表错误,和Buffer类型,代表文件的内容
格式不能写错

2.开始
1 实现输入ip地址后直接跳转到index.html

 let pathname=url.parse(request.url).pathname;
pathname=pathname==='/'?'/index.html':pathname;

先引入url模块,用parse得到路径
(这样使用和直接读取request.url相比的好处是不会受到后面get传值对url产生的影响)
如果得到‘/’代表直接打开了127.0.0.1:8888这样的url,这时把路径变成127.0.0.1:8888/index.html
2 把要用到的前端文件先存到一个static目录下,方便管理
因为每次响应时除了浏览器中看到的url,他还会请求一个’/favicon.ico’
先写一个if过滤掉

if(pathname!=='/favicon.ico'){
     fs.readFile('./static'+pathname,(err,data)=>{
         if(err){
             response.writeHead(404,{'Content-Type': 'text/html;charset="utf-8"'});
             response.end("页面不存在");

         }
         let mime=common.getFileExtname(extname);
         response.writeHead(200,{'Content-Type': ''+mime+';charset="utf-8"'});
         response.end(data);
     })
 }

如果pathname不等于’/favicon.ico’
使用readFile方法读取static/pathname目录下的文件
如果这个文件不存在,代表想访问的页面不存在了,会得到err,然后将响应头改为404,页面报错
如果是存在的页面则会响应200,输出相应内容结束相应

3.改响应头
因为不同类型(不同后缀)的文件,对应的响应头是不同的,比如
“.zip”:“application/zip”
“.jpe”:“image/jpeg”
“.html”:“text/html”
“.css”:“text/css”
因为node里响应头要自己写,所以只有根据不同的后缀,改不同的响应头才能不出错
这里引入一个包含大多数后缀和响应头内容对应的mime.json文件,然后新建一个common.js
写根据后缀找到响应头的方法并暴露(其实直接写到前面的js文件里也可…)

var fs=require('fs');
exports.getFileExtname=function (extname) {
    var data=fs.readFileSync("./data/mime.json");
    var mime=JSON.parse(data.toString());
    return mime[extname];



}

因为readFile是异步读取文件,在实际操作时会出错,除非使用await方法等等
所以这里用readFileSync,同步读取文件,(这个操作只有文件读取完成后才会继续执行其他代码)
common中的代码从mime.json中读取对象类型的内容,根据传入的extname(后缀名)返回相应的内容
至于extname怎么获得,可以用path模块中的方法var extname=path.extname(pathname);

关于异步读取文件

可以使用ES7提供的async/await语法,异步读取文件内容。async/await函数必须成对使用(await必须出现在async函数中),关键词await可以让JavaScript进行等待,直到一个promise执行并返回它的结果,JavaScript才会继续往下执行。

e.g.b站大佬的例子
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值