静态资源文件管理

来源:互联网 发布:服装面料软件 编辑:程序博客网 时间:2024/06/07 01:41

我们知道不同于Apache的是,nodejs中文件的物理地址与其真实的地址完全没有关系,也就是说,如果你在地址栏输入:
这里写图片描述
我们可以访问到一个真实地址完全没有关系的文件,这是为什么嘞?因为我们可以在代码中这样写:

var http = require('http');var url = require('url');var fs = require('fs');var server = http.createServer(function (req,res) {  //先获取的向服务器请求的路径    var pathname = url.parse(req.url).pathname;    //然后进行判断    if(pathname == '/aaa/bb'){    //当符合条件时,我们可以读取任意我们想要的文件     fs.readfile('./static/1.html',function(err,data){         res.end(data);    })   }})

现在我们想实现一个目标,就是我们在地址栏输入路径输入的就是对应我们需要的文件
文件结构如下:
这里写图片描述
在staticfind.js代码中控制mystatic为根目录,在地址输入的路径对应相应文件
代码如下:

//模拟apache静态文件管理的功能var http = require('http');var url = require('url');var fs = require('fs');var path = require('path');var server = http.createServer(function (req,res) {    //先获取的向服务器传入的路径    var pathname = url.parse(req.url).pathname;    //对小图标的请求不做处理    if(pathname == '/favicon.ico'){        return;    }    console.log(pathname);    //许多用户不会直接输入主页面的名称。手动添加    if(pathname == '/'){        pathname = '/1.html';    }    //每次向服务器发送请求时,获取其文件的拓展名    var extendname = path.extname(pathname);    console.log(extendname);   //读取文件    fs.readFile('./mystatic/'+pathname,function (err,data) {        if(err){            console.log(111);           //当文件夹中不存在用户输入的界面时,为用户弹出404界面            fs.readFile('./mystatic/404.html',function (err,data) {                res.end(data);            })               //返回404页面,但需要注意的是这里是一个异步操作,当文件还未读取完毕就会继续执行下面的语句,所以我们必须在此之前将它返回            return;        }        var mime = getMime(extendname);        console.log(mime);        res.writeHead(200,{'Content-type':mime+';charset=UTF8'});        res.end(data);    })}).listen(1400,'127.0.0.1');//这里我们遇到一个问题,当我们所加载的文件中嵌套这其他类型的文件,我们需要在响应头中辨别它的类别function getMime(extendname) {  switch (extendname){      case './html':          return 'text/html;'          break;      case './jpg':          return 'image/jpg';          break;      case './png':          return 'image/png';          break;      case '.css':          return 'text/css';          break;  }}console.log(1);
原创粉丝点击