1、Nodejs 静态文件托管

上一讲的静态 web 服务器封装

项目结构:

Web服务器封装成的模块:router.js代码:

var http=require('http');
var fs=require('fs');
var path=require('path'); /*nodejs自带的模块*/
var url=require('url');
//引入events模块解决无法获取异步数据问题
var events=require("events");
var EventEmitter=new events.EventEmitter();
module.exports = {
statics: function (req, res,staticpath) {
var pathname = url.parse(req.url).pathname;/*获取url传值*/
if (pathname == '/') {
pathname = '/index.html'; /*默认加载的首页*/
}
//获取文件的后缀名
var extname = path.extname(pathname);
if (pathname != '/favicon.ico') { /*过滤请求favicon.ico*/
//文件操作获取 static下面的文件
fs.readFile(staticpath+'/' + pathname, function (err, data) {
if (err) { /*么有这个文件*/
console.log('404');
fs.readFile(staticpath+'/404.html', function (error, data404) {
if (error) {
console.log(error);
}
res.writeHead(404, {"Content-Type": "text/html;charset='utf-8'"});
res.write(data404);
res.end(); /*结束响应*/
})
} else { /*返回这个文件*/
getMime(extname, EventEmitter) /*获取文件类型*/
EventEmitter.on("msg", function (text) {
res.writeHead(200, {"Content-Type": "" + text + ";charset='utf-8'"});
//res.write(data);注意,在接收广播的回调函数里面不能使用write了,否则会报错:write after end
res.end(data); /*结束响应*/
})
}
})
}
}
} //获取文件类型的方法, 私有
function getMime(etxName,EventEmitter) {
fs.readFile("./mime.json",function (err,data) {
if (err){
console.log('mime.json文件不存在');
}else {
//console.log(data.toString());//将十六进制转换为字符串
var mimes=JSON.parse(data.toString());//将json字符串转换为json对象
EventEmitter.emit("msg",mimes[etxName]||"text/html")//广播对应的头文件信息,如果没有的话就返回text/html
}
})
}

创建服务器的00service01.js的代码:

var http=require('http');
var fs=require('fs');
var router=require("./model/router") http.createServer(function (req,res) {//注意req,res不要写反 router.statics(req,res,"static") }).listen(8002)

2、路由

官方解释:

路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法的,涉及到应用如何响应客户端对某个网站节点的访问。

非官方解释:

路由指的就是针对不同请求的 URL,处理不同的业务逻辑。

路由代码参考:

var http = require("http")
var url = require("url")
http.createServer(function (req, res) {
var allUrl = req.url;
var path = url.parse(allUrl).pathname;
if (path == "/login") {
res.end("login")
} else if (path == "/register") {
res.end("register")
} else if (path == "/admin") {
res.end("admin")
}
})

二十、Node.js- WEB 服务器 (三)静态文件托管、 路 由的更多相关文章

  1. Node.js WEB服务器(1)——编写简单的HTTP服务器

    基于分而治之的思想,很多架构都会采用分层的模式来处理某类应用.Node.js在Web开发上也是采用这种模式,分别提供了如下的三个层: Node核心 社区模块 应用逻辑 下面是一个最简形式的web服务器 ...

  2. 使用node建立本地服务器访问静态文件

    最终目录结构 demo │ node_modules └───public │ │ index.html │ │ index.css │ └───index.js └───server.js 一.使用 ...

  3. 二十:jinja2之加载静态文件

    静态文件: flask默认指定的静态文件路径为根目录下的static,可以自定义路径,并指定,使用url_for('文件夹', filename='文件名')引用 加载css文件 加载js文件 其他文 ...

  4. 3 web服务器:静态文件

    1.处理客户端请求数据 >>> s = "GET / HTTP/1.1\r\nHost: 127.0.0.1:8080\r\nConnection: keep-alive& ...

  5. 第三百二十八节,web爬虫讲解2—urllib库爬虫—状态吗—异常处理—浏览器伪装技术、设置用户代理

    第三百二十八节,web爬虫讲解2—urllib库爬虫—状态吗—异常处理—浏览器伪装技术.设置用户代理 如果爬虫没有异常处理,那么爬行中一旦出现错误,程序将崩溃停止工作,有异常处理即使出现错误也能继续执 ...

  6. 用Node.js原生代码实现静态服务器

    ---恢复内容开始--- 后端中服务器类型有两种 1. web服务器[ 静态服务器 ] - 举例: wamp里面www目录 - 目的是为了展示页面内容 - 前端: nginx 2. 应用级服务器[ a ...

  7. 第三百二十三节,web爬虫,scrapy模块以及相关依赖模块安装

    第三百二十三节,web爬虫,scrapy模块以及相关依赖模块安装 当前环境python3.5 ,windows10系统 Linux系统安装 在线安装,会自动安装scrapy模块以及相关依赖模块 pip ...

  8. node.js Web应用框架Express入门指南

    node.js Web应用框架Express入门指南 作者: 字体:[增加 减小] 类型:转载 时间:2014-05-28 我要评论 这篇文章主要介绍了node.js Web应用框架Express入门 ...

  9. node.js Web应用框架Express.js(一)

    什么是Express.js Express 是一个简洁而灵活的 node.js Web应用框架, 提供一系列强大特性帮助你创建各种Web应用,提供丰富的HTTP工具以及来自Connect框架的中间件随 ...

随机推荐

  1. python 中的type

    1. type(object) -> the object's type 返回的是object的类型,即对象的类定义 例如:用元类动态生成子类metaclass = type(father)   ...

  2. [bzoj2212]Tree Rotations(线段树合并)

    解题关键:线段树合并模板题.线段树合并的题目一般都是权值线段树,因为结构相同,求逆序对时,遍历权值线段树的过程就是遍历所有mid的过程,所有能求出所有逆序对. #include<iostream ...

  3. Linux显示文件前几行、拷贝文件前几行、删除文件前几列

    [一]显示文件前几行 ll -lrth:按照更改时间倒序排列,最新文件在下边 ll -lrSh:按照文件大小倒序排列,最大文件在下边 grep --color :高亮查询关键字 grep -A 10 ...

  4. winfrom在图片上实现绘制

    在控件加载入图片的基础上进行绘制内容 添加文字 首先就是要确定输入的文字,还有文字的样式. 文字的样式用到了FontDialog控件,获取文字呢,就放个textbox就可以了.如果在输入文字的显示展示 ...

  5. Python实现目录文件的全量和增量备份

    目标: 1.传入3个参数:源文件路径,目标文件路径,md5文件 2.每周一实现全量备份,其余时间增量备份 1.通过传入的路径,获取该路径下面的所有目录和文件(递归) 方法一:使用os.listdir ...

  6. 657. Judge Route Circle机器人能否返回

    [抄题]: Initially, there is a Robot at position (0, 0). Given a sequence of its moves, judge if this r ...

  7. Madgwick算法详细解读

    Madgwick算法详细解读 极品巧克力 前言 接上一篇文章<Google Cardboard的九轴融合算法>. Madgwick算法是另外一种九轴融合的方法,广泛应用在旋翼飞行器上,效果 ...

  8. Video组件:控制视频的播放与暂停

    来自<sencha touch权威指南>第10章,315页开始 app.js代码如下: Ext.require(['Ext.Video','Ext.MessageBox','Ext.Too ...

  9. KNN算法python实现

    1 KNN 算法 knn,k-NearestNeighbor,即寻找与点最近的k个点. 2 KNN numpy实现 效果: k=1 k=2 3 numpy 广播,聚合操作. 这里求距离函数,求某点和集 ...

  10. 在windows上编译wireshark源代码

    终于在windows上成功编译了wireshark源代码,个中酸辛,都是泪..只能说要多试! windows上编译wireshark共用到三个东西:wireshark源代码.python.cygwin ...