二十、Node.js- WEB 服务器 (三)静态文件托管、 路 由
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 服务器 (三)静态文件托管、 路 由的更多相关文章
- Node.js WEB服务器(1)——编写简单的HTTP服务器
基于分而治之的思想,很多架构都会采用分层的模式来处理某类应用.Node.js在Web开发上也是采用这种模式,分别提供了如下的三个层: Node核心 社区模块 应用逻辑 下面是一个最简形式的web服务器 ...
- 使用node建立本地服务器访问静态文件
最终目录结构 demo │ node_modules └───public │ │ index.html │ │ index.css │ └───index.js └───server.js 一.使用 ...
- 二十:jinja2之加载静态文件
静态文件: flask默认指定的静态文件路径为根目录下的static,可以自定义路径,并指定,使用url_for('文件夹', filename='文件名')引用 加载css文件 加载js文件 其他文 ...
- 3 web服务器:静态文件
1.处理客户端请求数据 >>> s = "GET / HTTP/1.1\r\nHost: 127.0.0.1:8080\r\nConnection: keep-alive& ...
- 第三百二十八节,web爬虫讲解2—urllib库爬虫—状态吗—异常处理—浏览器伪装技术、设置用户代理
第三百二十八节,web爬虫讲解2—urllib库爬虫—状态吗—异常处理—浏览器伪装技术.设置用户代理 如果爬虫没有异常处理,那么爬行中一旦出现错误,程序将崩溃停止工作,有异常处理即使出现错误也能继续执 ...
- 用Node.js原生代码实现静态服务器
---恢复内容开始--- 后端中服务器类型有两种 1. web服务器[ 静态服务器 ] - 举例: wamp里面www目录 - 目的是为了展示页面内容 - 前端: nginx 2. 应用级服务器[ a ...
- 第三百二十三节,web爬虫,scrapy模块以及相关依赖模块安装
第三百二十三节,web爬虫,scrapy模块以及相关依赖模块安装 当前环境python3.5 ,windows10系统 Linux系统安装 在线安装,会自动安装scrapy模块以及相关依赖模块 pip ...
- node.js Web应用框架Express入门指南
node.js Web应用框架Express入门指南 作者: 字体:[增加 减小] 类型:转载 时间:2014-05-28 我要评论 这篇文章主要介绍了node.js Web应用框架Express入门 ...
- node.js Web应用框架Express.js(一)
什么是Express.js Express 是一个简洁而灵活的 node.js Web应用框架, 提供一系列强大特性帮助你创建各种Web应用,提供丰富的HTTP工具以及来自Connect框架的中间件随 ...
随机推荐
- Specular Mask Texture
[Specular Mask Texture] Specular Texture是一个Mask纹理,通过Mask纹理的texel可以控制每个像素的纹理. 在属性中添加Specular Mask Tex ...
- screen command of linux
[screen command of linux] 常用键: 补充: Ctrl-a S # split terminal horizon Ctrl-a TAB # switch to ano ...
- Codeforces 721E DP
大概思路及题意看这篇博客吧 我的理解:设f[i]表示处理到第i个区间,能唱的最多的歌,g[i]是保证f[i]最大时最靠左的点.那么f[i] = max(f[j] + (r[i] - max(l[i], ...
- Java-随机数工具类
import java.util.Random; import java.util.concurrent.ThreadLocalRandom; import org.apache.commons.la ...
- 手把手教你生成二维码-google.zxing
一.目标 输入网址,生成网址的二维码 二.概况 1.效果:UI丑,但功能实现了 2.项目目录 三.用到的第三方资源 1.google的扫码包zxing 2.JQuery 四.步骤(用myEclipse ...
- Video组件:控制视频的播放与暂停
来自<sencha touch权威指南>第10章,315页开始 app.js代码如下: Ext.require(['Ext.Video','Ext.MessageBox','Ext.Too ...
- linux环境下搭建osm_web服务器四(对万国语的地名进行翻译和检索):
对万国语的地名进行翻译和检索 经过 前三篇的调试,已经有了一个完整的Map可以浏览,我们痛苦的世界范围数据下载.导入过程也结束了.要提醒一下的是,鉴于网速,不要下载 planetosm.lastest ...
- Flask框架 之 第三方组件
浏览目录 flask-session flask-sqlalchemy flask-script flask-migrate flask-session 安装 pip3 install flask-s ...
- 拖拽demo--兼容--全局捕获
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【转】C语言中DEFINE简介及多行宏定义
要写好C语言,漂亮的宏定义是非常重要的.宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等. 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定 ...