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. CBCentralManagerDelegate Protocol 委托协议相关分析

    总体概述 CBCentralManagerDelegate 协议中定义了一系列方法列表,这些方法是委托对象必须要实现的方法(也有可选择的),当中央管理器的相应变化就会调用委托对象中实现的相应方法. M ...

  2. java算法 第七届 蓝桥杯B组(题+答案) 7.剪邮票

    7.剪邮票  (结果填空) 如[图1.jpg], 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,[图2.jpg],[图3.jpg]中,粉红 ...

  3. 第一个MFC实例:计算圆周长和圆面积

    一.基于Microsoft MFC的编程方法 MFC是微软基础类库(Microsoft Foundation Class)的缩写.与API不同,MFC不是Windows操作系统的组成部分,而是微软公司 ...

  4. Opencv 计算图片旋转角度

    vector<vector<Point>> vec_point;vector<Vec4i> hireachy;findContours(img_canny1, ve ...

  5. C#在控制台输出异常所在的行数

    对于异常,我们经常用try-catch语句来处理,一种常见的方式是在catch语句块用MessageBox.Show("异常")这种弹窗的方式来报告异常.但是有些时候,有些异常发生 ...

  6. scanf是怎么从标准输入读取数据的

    scanf是从标准输入读取数据的 假设现在标准输入中的数据是123456 int a; 而我scanf("%d",&a); 会把123456转化为数字然后存入到a中. 如果 ...

  7. EZOJ #224

    传送门 分析 首先我们发现要让答案最小,或运算一定是没有用的 我们还可以发现a^b = a&(~b) 所以异或运算也没有用 于是我们只考虑否和与 我们还会得到一个性质就是没增加一个数一定会让答 ...

  8. Python爬虫入门二之爬虫基础了解

    1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.想抓取什么?这个由你来控制它咯. ...

  9. smarty类与对象的赋值与使用

    <?phprequire_once('../smarty/Smarty.class.php'); //配置信息$smarty=new Smarty(); $smarty->left_del ...

  10. 微信第三方登录测试时报Scope参数错误或没有Scope权限解决方法

    一 报错信息: 二 出现原因分析: 出现这种错误网上查出现有的原因是: 1. 订阅号没有相关的权限 2. 账号没有认证,没有相关的权限 那么这里遇到问题两种都不是.开发账号是 服务号,而且也是认证号. ...