二十、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框架的中间件随 ...
随机推荐
- python:随机数 random
#随机数 import random print(random.randint(10,12))#生成10-12之间的整数 print(random.uniform(10,12))#生成10-12之间的 ...
- Bootstrip 的select的数据绑定问题
这个问题浪费了我整整一个下午时间 最后终于解决了 这里来备份一下 $(function(){ var stu_no = freeUrl(); var data, subname="&quo ...
- SPI子系统分析之四:驱动模块
内核版本:3.9.5 SPI控制器层(平台相关) 上一节讲了SPI核心层的注册和匹配函数,它是平台无关的.正是在核心层抽象了SPI控制器层的相同部分然后提供了统一的API给SPI设备层来使用.我们这一 ...
- linux下connect超时时间探究
最近在linux做服务器开发的时候,发现了一个现象:服务器在启动的时候调用了 connect 函数,因为连接了一个不可用的端口,导致connect最后报出了 “Connection timed out ...
- 自学安卓开发篇——day01
第一次自学安卓开发,首先从开发环境的配置说起,目前安卓开发主要用到的开发环境是Android Studio和Eclipse+ADT,由于我自己的笔记本配置比较低,而studio对电脑的配置要求比较高, ...
- windows server R2 密钥
一.win2012r2激活码 永久激活 Volume版 Windows Server 2012 R2 Datacenter数据中心版: [Key]:TVNTG-VFJQ3-FQXFP-DVCP6-D3 ...
- ElasticSearch的java api
pom <dependencies> <dependency> <groupId>org.elasticsearch.client</groupId> ...
- Python实现常见算法[2]——快速排序
#!/usr/bin/python # module: quik_sort.py def PARTION(L,m,n): base = L[n] i = m-1 j = m while j<n: ...
- Shiro 集成Spring 使用 redis时 使用redisTemplate替代jedisPool(五)
1.添加依赖架包: <dependency> <groupId>org.springframework.data</groupId> <artifactId& ...
- [SoapUI] 在某个测试步骤下面增加Script Assertion,运用 messageExchange 获取response content
import com.eviware.soapui.support.GroovyUtils import com.eviware.soapui.support.XmlHolder import org ...