# 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参数应该调用的模块、类、方法在哪里,把请求发送过去。
``` javascript
// 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');
});
```
通过模糊匹配路由
``` javascript
// 匹配 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');
});
```
通过正则表达匹配路由
``` javascript
// 匹配任何路径中含有 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是一个方法,被调用后,继续走下一个中间件。
### 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参数应该调用的模块、类、方法在哪里,把请求发送过去。
``` javascript
// 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');
});
```
通过模糊匹配路由
``` javascript
// 匹配 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');
});
```
通过正则表达匹配路由
``` javascript
// 匹配任何路径中含有 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是一个方法,被调用后,继续走下一个中间件。