用node搭建简单的静态资源管理器
我们都知道,老牌的3p服务器都是自带静态资源管理器的。但是node不同,它没有web容器,它的路由地址和真实地址可以没有联系,所有node的优点,是可以把路由做得相当漂亮。
但静态资源管理器也是必不可少的东西,今天我主要用node的fs模块,自己手写一个简单的静态资源管理器。
首先,建一个static文件夹,所有的静态文件都将放到这个文件夹下

引包
var http = require("http");
var url = require("url");
var fs = require("fs");
var path = require("path");
path包是为了读取文件的后缀名
var extname = path.extname(pathname);
用fs读出文件
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;
//判断此时用户输入的是文件地址还是文件夹地址
//如果是文件夹地址,那么自动请求文件夹中的index.html
if(pathname.indexOf(".") == -1) {
pathname = "index.html";
}
//拓展名
var extname = path.extname(pathname);
//把文件读出来
res.writeHead(200,{"Content-type":"text/html;charset=UTF-8"});
fs.readFile("./static/"+pathname,function(err,data) {
if(err) {
//如果此文件不存在,就因该用404返回
fs.readFile("./static/404.html",function(err,data) {
res.writeHead(404,{"Content-type":"text/html;charset=UTF-8"});
res.end(data);
});
return;
//res.end('<center>服务器傲娇的向你抛出了一个404错误</center')
};
//MIME类型,就是
//网页文件:ttext/html
//jpg文件:image/jpg
getMime(extname,function(mime) {
res.writeHead(200,{"Content-type":mime});
res.end(data);
});
});
}).listen(3000,"127.0.0.1");
function getMime(extname,callback) {
fs.readFile("./static/data.json",function(err,data) {
if(err) {
throw Error("找不到data,json文件");
return;
}
var data = JSON.parse(data);
var mime = data[extname]||"text/plain";
callback(mime);
});
/*switch(extname) {
case:".html":
return "text/html";
break;
case ".jpg" :
return "image/jpg";
break;
case ".css" :
return "text/css";
break;
}*/
}
getMime()函数的作用是给不同类型的文件指定不同的content-type。这里我用了两种方法,一种是引入一个包含很多mime的json文件,另一种是直接列举case语句。
引入json的方法要复杂一下。你要注意怎样传参和怎样去设置回调,来避免异步。
用node搭建简单的静态资源管理器的更多相关文章
- 使用Node.js快速搭建简单的静态文件服务器
做前端有时会采用一些复杂框架,在文件系统中直接打开页面(用file:///方式打开),往往会报跨域的错,类似于“XMLHttpRequest cannot load ...(文件名). Cross o ...
- 用node.js实现mvc相册资源管理器
摘要:通过前两天的学习我大概学了了,用formidable模块文件上传,express框架,以及利用fs模块进行文件读取,今天我学习了如何用这些知识来制作相册,暂没有数据库,所以做的也是本地的资源管理 ...
- node搭建简单的本地服务器
首先要安装node,方法很多,可以去网上找找,可以直接去官网下载安装,新版本的node是自带npm的: 安装好以后,新建一个js文件,名为server.js: let http = require(' ...
- 使用node搭建简单的服务
//创建依赖模块var http = require('http');var url = require('url');var fs = require('fs');var server = http ...
- 【转】Visual Studio团队资源管理器 Git 源码管理工具简单入门
1.1 环境 Visual Studio + GitLab (其他版本同理) 1.2 Git操作过程图解 1.3 常见名词解释 拉取(Pull):将远程版本库合并到本地版本库,相当于(Fetch+Me ...
- winform:简单文件资源管理器
今天全部学习内容的体现就是winform的资源管理器.这个资源管理器主要由一个textbox获取路径,然后在treeview那里通过递归的方式呈现目录树,当用户点击treeview的节点是,会触发Af ...
- 玩转Node.js(四)-搭建简单的聊天室
玩转Node.js(四)-搭建简单的聊天室 Nodejs好久没有跟进了,最近想用它搞一个聊天室,然后便偶遇了socket.io这个东东,说是可以用它来简单的实现实时双向的基于事件的通讯机制.我便看了一 ...
- Eclipse插件(导出UML图,打开文件资源管理器插件,静态代码分析工具PMD,在eclipse上安装插件)
目录 能够导出UML图的Eclipse插件 打开文件资源管理器插件 Java静态代码分析工具PMD 如何在eclipse上安装插件 JProfiler性能分析工具 从更新站点安装EclEmma 能够导 ...
- node静态资源管理变迁之路
使用express自带的,express.static,如:app.use(express.static('hehe')),就可以用localhost/hua.png,访问项目根目录下,hehe文件夹 ...
随机推荐
- Java第二季
1.封装 (1)概念 将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. (2)封装的实现步骤 2.Java中的访问修饰符 3.继承 (1)Ja ...
- Android Weekly Notes Issue #286
December 3rd, 2017 Android Weekly Issue #286 本期文章包含如何通过踩坑来学习Kotlin,以及利用Kotlin的data class做MVVM状态保存,还包 ...
- WPF自定义产品框架
在讲解之前先看一下效果,有助于理解: 这是客户端的效果图.整个产品分为两部分:1.WPF开发的展示效果的客户端 2.WCF开发的提供数据服务接口的服务端 本章主要讲解一下实际中开发WPF开发客 ...
- HDU1864--01背包
最大报销额 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- Java SE 8 流库(二)
1.3. filter,map,flatMAP方法 流的转换会产生一个新流,它的元素派生出自另一个流中的元素: Stream<T> filter(Predicate<? super ...
- jquery on的常用 用法
定义和用法 on()方法在被选元素及子元素上添加一个或多个方法. 提示:使用on方法添加的事件处理程序适用于当前及未来的元素(javascript创建的) 提示:移除事件处理程序使用off()方法,如 ...
- C++ list forward_list
list,forward_list list:双向链表 forward_list:单向链表 在任何位置添加元素,删除元素都很快,但随机访问元素则很慢 声明和初始化 list<T> l; l ...
- 初识homebrew
homebrew是MAC上的一个包管理工具,用于软件安装,非常方便. homebrew安装: 命令行执行: ruby -e "$(curl -fsSL https://raw.githubu ...
- anaconda不能安装python的包问题
在点了n次,重启应用多次之后,安装包(apply)之后还是没有反应,依然心平气和的我突然想到用管理员模式打开,结果就可以愉快的装包了,估计创建新的环境也是要管理员打开的.
- Linux企业运维人员必备150个命令汇总
命令 功能说明 线上查询及帮助命令(2个) man 查看命令帮助,命令的词典,更复杂的还有info,但不常用. help 查看Linux内置命令的帮助,比如cd命令. 文件和目录操作命令(18个) l ...