中间件
node-project-lesson1
反馈
querystring模块的使用不太清楚
0.经验总结
0.0 框架和jquery的区别?
框架比包、工具类大,而且框架是调用你写的代码,工具类是提供接口或者代码的,让你调用的。
1.mvc
1.1 什么样的代码才能称之为优雅?
问题
怎么去写一个函数
var add=function(v1,v2){
var date=new Date();
return v1+v2;
}
这样写不优雅,写代码和写作文一样,需要点题。
什么样的代码能放在一个js里
点题
如何去设计两个函数直接的调用 var add=function(v1,v2,date){
return ''+v1+v2+date; } var add =function(v1,v2){ return v1+v2; } add()+date;
- 完成功能!=代码优雅----->一个基本的衡量标准低耦合高内聚
1.2 什么是高内聚低耦合?
内聚从功能角度来衡量模块内代码的联系,
一个好的内聚模块应当恰好做一件事--->被我们称之为高内聚。
例如,计算器模块
高内聚优势:1.可读性;2.复用性;3.方便维护和修改
- 耦合是各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。
- 低耦合:1. 独立完成任务 2.复用性 3.方便维护和修改
- 理解高内聚低耦合能使我们更好的理解mvc
1.3什么是mvc?
MVC是一种设计思想,它是所有面向对象程序设计语言都应该遵守的规范。 MVC思想讲一个应用分成三个基本部分:Model(模型),View(视图) ,Controller(控制器),这三个部分以最少的耦合协同工作, 从而提高应用的可扩展性及可维护性。 大部分web技术的框架基本都属于mvc结构的,包括java、.net、node等。
2.express
npm install express --save npm i -S express
npm install express --save-dev npm i -D express 脚手架工具的安装 npm install -g express-generator
2.1为什么使用框架?
app.use(express.static(path.join(__dirname, 'public')));
- 原生Node开发,会发现很多问题。比如:
- 呈递静态页面很不方便,需要处理每个HTTP请求
- 路由处理不直观清晰,需要写很多字符串判断和正则表达式
- 不能集中精力写业务,要考虑很多其它的东西
- Express框架致力于解决上述问题。
例如,jQuery,简化了dom操作,让我们的关注点从如何去操作dom转变成具体我们要操作dom去干什么。
2.2 express介绍
express 中文官网http://www.expressjs.com.cn/
- Express是目前最流行的基于Node.js的Web开发框架,提供各种模块,可以快速地搭建一个具有完整功能的网站。
Express有着惊艳的路由能力
Express中静态资源服务,就是一句话的事儿
Express与模板引擎配合,直观清晰。
2.3 路由
路由器,是告知请求者,所请求的ip在哪里,并且把信息发送过去。
web框架的路由,是告知框架,所请求的http参数应该调用的模块、类、方法在哪里,把请求发送过去。
// GET method route app.get('/', function (req, res) { res.end('GET request to the homepage'); }); // POST method route app.post('/', function (req, res) { res.end('POST request to the homepage'); });
通过模糊匹配路由
// 匹配 acd 和 abcd app.get('/ab?cd', function(req, res) { res.send('ab?cd'); }); // 匹配 abcd、abbcd、abbbcd等 匹配n个加号前的字母 app.get('/ab+cd', function(req, res) { res.send('ab+cd'); }); // 匹配 abcd、abxcd、abRABDOMcd、ab123cd等 *代表任意 app.get('/ab*cd', function(req, res) { res.send('ab*cd'); }); // 匹配 /abe 和 /abcde app.get('/ab(cd)?e', function(req, res) { res.send('ab(cd)?e'); });
通过正则表达匹配路由
// 匹配任何路径中含有 a 的路径: app.get(/a/, function(req, res) { res.send('/a/'); }); // 匹配 butterfly、dragonfly,不匹配 butterflyman、dragonfly man等 app.get(/.*fly$/, function(req, res) { res.send('/.*fly$/'); });
2.4 中间件
2.4.1 什么是中间件?
Express 是一个自身功能极简,完全是由路由和中间件构成一个的 web 开发框架:从本质上来说,一个 Express 应用就是在调用各种中间件。 中间件(Middleware)是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res)), 和 web 应用中处于请求-响应循环流程中的中间件,一般被命名为 next 的变量。
- 往往一个http请求发送到服务器,都需要通过很多的判断和处理。 一个请求发送过来---->用户是否已经登录---->用户请求的是什么资源(静态资源、动态页面、json数据)---->统计一下用户的请求--->(如果请求的内容不存在)返回404
中间件的功能包括: 执行任何代码。 修改请求和响应对象。 终结请求-响应循环。 调用堆栈中的下一个中间件。 如果当前中间件没有终结请求-响应循环,则必须调用 next() 方法将控制权交给下一个中间件,否则请求就会挂起。 通过 app.use(中间件的代码)使用中间件
2.4.2 中间件种类
Express 应用可使用如下几种中间件:
- 内置中间件
- 第三方中间件
错误处理中间件
- 应用级中间件
- 路由级中间件
2.4.3 内置中间件
介绍
从 4.x 版本开始,express取消了大部分的内置中间件,除了 express.static, Express 以前内置的中间件现在已经全部单独作为模块安装使用了
为什么只留一个中间件
让express只留一个框,轻量、灵活、便于修改。
2.4.4 使用中间件
挂载中间件
app.use([path],function)
回调函数中的参数
req, res, next
next是一个方法,被调用后,继续走下一个中间件。