ES6对象的简写方法
---------------------------------------
1. 对象的简写方法
1.1 如果对象的属性名和属性值同名,对象的属性可以简写为如下:

eg:

var name = "laowang";

var obj = {name:name}; => var obj = {name}

2.2 对象的方法可以简写为

eg1:
var obj = { getName:()=>{}};

eg2:
var obj = { getName(){}};

eg3: function getName(){} var obj = {getName};

2. 字符串模板

eg:
var name = "laowang";
var str = `哈哈,${name}我爱你`;
console.log(str)
输出结果: 哈哈,老王我爱你

原理:正则表达式的替换

优点:相比字符串和变量拼接,非常方便

-----------------------------------------
NodeJs 之 Express 框架

1. 什么是express

# Express框架是后台的javascript框架

2. 为什么要使用express

原生Node开发,会发现有很多问题。比如:
呈递静态页面很不方便,需要处理每个HTTP请求,还要考虑304问题
路由处理代码不直观清晰,需要写很多个条件分支

总之:不能集中精力写业务,要考虑很多其他的东西

所以,express可以帮助我们解决上述问题

3. 安装Express框架,就是使用npm的命令。

方法一:npm install --save express

方法二:npm install express --save

# --save参数,表示自动修改package.json文件,自动添加依赖项

4. 路由

app.get("路由路径",callback(req,res));

# 当用get请求访问一个网址的时候,做什么事情

app.post("路由路径",callback(req,res))

# 用post访问一个网址的时候,做什么事情

app.all("路由路径",callback(req,res));

# 不管是get请求还是post请求都会处理这个路由路径

路由模糊匹配

app.get("/:teacher/:number",callback(req,res));

# 表示模糊匹配路由路径内容,可以匹配任何路由路径的形式为/sfdsfdsf/sdsfsf
# 可以把teacher和number当做变量 然后通过req.params 来拿到值
# req.params为对象通过teacher和number变量来拿到teacher和number变量的值


注意:
1. 路由路径,可以忽略大小写

2. 可以采用链式调用方法处理不同的路由

3. res.send() 可以发送任何数据类型的数据

4. 如果想使用不同的状态码,可以:

res.status(404).send('内容');
5. 如果想使用不同的Content-Type,可以:

res.set('Content-Type', 'Mime类型');

5. send() 发送的数据类型可以有多种,原生的nodejs发送的数据类型只能为字符串或者buffer

5.1 send("字符串")

# 自动添加请求头text/html

5.2 send(数组或对象)

# 自动添加请求头application/json

# json 是一种数据传输格式,json包含有json数组和json对象
# 在发送对象或者数组的时候已经将数组或者对象进行转换为json字符串了

5.3 send(buffer)

# 自动添加请求头 applicaiton/octet-stream


6. 为什么res.send() 内容为buffer对象的时候浏览器会下载?

因为在send的时候,express会自动识别内容,然后添加相对用的content-type类型
当发送的内容为buffer对象的时候,添加的content-type类型为 application/octet-stream,
而这个流是一个不能被浏览器解析的流,必须被下载


7.静态文件处理

app.use(express.static("文件夹"));

8. 模板引擎

需要在应用中进行如下设置才能让 Express 渲染模板文件:

views, 放模板文件的目录,比如: app.set('views', './views') 默认为这个目录
view engine, 模板引擎,比如: app.set('view engine', 'ejs')

9. 在express中路由路径的匹配是从上往下匹配的,如果有一个匹配成功,就不会再去匹配下面的路由路径,
这个时候如果想让他继续去匹配其他的路由就需要使用next中间件了

eg:
app.get("/",(req,res,next))

如何理解中间件的作用?

# 中间件可以预先处理所有请求再转交给特定的路由来进行处理。


10. app.use();

# 匹配路由前缀,只要前缀匹配成功,那么所有的路由都会被执行

# 当路由路径为根路径的时候,express规定路由路径参数可以不写


11. GET请求和POST请求的参数

11.1 get请求

GET请求的参数在URL中,在原生Node中,需要使用url模块来识别参数字符串。在Express中,不需要使用url模块了。可以直接使用req.query对象。

12.2 post请求

POST请求在express中不能直接获得,必须使用body-parser模块。使用后,将可以用req.body得到参数。但是如果表单中含有文件上传,那么还是需要使用formidable模块