博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Node实现静态服务器
阅读量:5839 次
发布时间:2019-06-18

本文共 1711 字,大约阅读时间需要 5 分钟。

1.Node里面是没有Web容器之说的,所以URL上的路径跟实际文件的路径并不是一致,这里我们手动实现一个简单的原生静态服务,让Node能够找到路径的文件,实现静态服务器功能。文件夹的任何文件都能被找到。

2.比如在index.html加一个图片时,Node的fs去找这个图片,但是WriteHead你就要写这个MIME类型,为image/jpg,虽然不写,Chrome浏览器可以显示(开发者工具可以看到这个1.jpg的Response Headers里不存在 Content-Type),有的浏览器是不能显示的,又比如CSS的文件你不写MIME类型,浏览器是识别不了了。

3.path模块获得后缀,然后写一个函数case所有情况,写进特定的MIME类型,这里也可以在函数里面再fs读一个写好的json文件,把所有类型都可以对应起来(教程上的小作业)。

 

//因为Node路由路径和实际文件路径并不一定一致,没有Web容器的原因,这里我们仿照Web路由的实现var http = require("http");var url = require("url");var fs = require("fs");var path = require("path");http.createServer(function(req, res) {    //得到用户的路径    var pathname = url.parse(req.url).pathname;    if(pathname == "/") {        pathname = "index.html";    }    //拓展名    var extname = path.extname(pathname);    // console.log(extname);    //真的读取这个文件    //缺点,太智能,但是不能检测是什么类型的文件    fs.readFile("./static/" + pathname, function(err, data) {        //data是一个Buffer,二进制的数据流        if(err) {            //如果文件不存在,就返回404            fs.readFile("./static/404.html", function(err, data) {                res.writeHead(404,{"Content-type":"text/html;chaset=UTF8"});                res.end(data);            });            return ;//必须这个,不然会走到下个data        }        //MIME类型,就是        //网页文件:text/html        //jpg文件:image/jpg        var  mime = getMIME(extname)        res.writeHead(200,{"Content-type":mime});        res.end(data);    })}).listen(3000,"127.0.0.1")function getMIME(extname) {    switch (extname) {        case ".html":            return "text/html";            break;        case ".jpg":            return "image/jpg";            break;        case ".css":            return "text/css";            break;        }}

 

转载于:https://www.cnblogs.com/zhangmingzhao/p/7745851.html

你可能感兴趣的文章
Linux常用命令笔记----交换空间的管理与维护
查看>>
reinterpret_cast强制类型转换
查看>>
我的mint mvc
查看>>
我的友情链接
查看>>
如何将Ubuntu 10.04 LTS 的窗口控制按钮从左上角调整到右上角
查看>>
Oracle_071_lesson_p18
查看>>
深入理解java注解的实现原理
查看>>
vsFTPd的553 Could not create file 错误
查看>>
view中使用监听
查看>>
python笔记(1.4-1.5)
查看>>
gitlab的启动报错问题
查看>>
无懈可击之完美dns架构
查看>>
corosync/openais+pacemaker实现web的高可用性
查看>>
mono android 非UI线程操作UI线程
查看>>
elk---日志收集
查看>>
数据库开发 - SQL注入与防范
查看>>
Symfony 2.2 新的url生成选项
查看>>
软件更新要求
查看>>
MySQL Replication主主复制—(实例)
查看>>
javascript的使用(2)函数的使用
查看>>