子应用
var app = express() //主应用
var admin = express() // 另一个应用
app.use('/admin', admin) // admin作子应用
意思是:如果你的路径是以’ /admin ‘开头的,app主应用就会把所有的事情交给admin子应用去处理。这样的好处就是可以隔绝出两个完全不同的应用,它们之间的关联会比较弱,方便去切割代码
‘/admin’ 就是admin的挂载点。 就像是admin应用挂靠在app的’/admin’上面
API
文档 http://expressjs.com/en/4x/api.html
Express提供的API只有5部分
express(), Application(), Request(), Response(), Router()
express.xxx
特别重要的几个:
app.use((req,res,next)=>{ res.send(‘hi’) console.log(‘req.body’); console.log(req.body); //用了express.json才会显示,不用的话打印的是undefined // req.on(‘data’,(chunk)=>{ // // console.log(chunk) // // }) next() })
![image.png](https://cdn.nlark.com/yuque/0/2020/png/851574/1609248811148-ef1f5efd-eaef-45d9-a006-b08f5b0597a7.png#align=left&display=inline&height=423&margin=%5Bobject%20Object%5D&name=image.png&originHeight=423&originWidth=696&size=20885&status=done&style=none&width=696)<br />用postman post一个对象给服务器<br />express.json()会通过监听data事件,把json完整地解析出来,不用的话是看不到的,因为有可能用户发送的数据是10m这么大的,requset.body不会把你解析这么大的数据。
<a name="JetV1"></a>
### express.static()
用法:<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/851574/1609249046991-b97fc3e0-90b0-4b20-81f5-65040a1f716b.png#align=left&display=inline&height=39&margin=%5Bobject%20Object%5D&name=image.png&originHeight=39&originWidth=323&size=7017&status=done&style=none&width=323)![image.png](https://cdn.nlark.com/yuque/0/2020/png/851574/1609249090529-cac0cfed-c039-4615-8d07-c483f215042f.png#align=left&display=inline&height=531&margin=%5Bobject%20Object%5D&name=image.png&originHeight=531&originWidth=643&size=64460&status=done&style=none&width=643)<br />发送一个get请求index 就会得到yyy/index.html这个文件<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/851574/1609249058549-a1a7c2a7-9f5c-44b0-a0d2-096921fc12d1.png#align=left&display=inline&height=568&margin=%5Bobject%20Object%5D&name=image.png&originHeight=568&originWidth=906&size=40868&status=done&style=none&width=906)<br />为什么请求/index.html会得到/yyy/index.html呢<br />因为exprsss.static()会默认帮你做一个静态服务器,只要你访问的路径在yyy里面有,就会给你找出来,如果没有就走之后的中间件。 比如你去get /style.css,就会得到hi,hi是后面的中间件返回的。
所以express.static()的代码逻辑应该是这样的:
```javascript
if(`有文件`){ //如果yyy有index.html
sendFile('index.html') //那么就发送回去
}else{
next()
}
express.raw()
如果你上传的是一个二进制文件(文档写的是application/octet-stream),那么这个方法就会把这个二进制文件写进req.body, req.body就是一个二进制文件了,不需要去处理监听data,回调chunk之类去处理的
express.text()
如果发现你上传的是一个文本,比如abc
, 那么他就会把req.body变成abc
。其实我们上传的东西一般是json或者encoded
express.urlencoded
这个方法会把x-www-form-urlencoded的内容解析到req.body里。
请求的原始内容应该是:name=hasson&age=18
小结
以上,可以看出experss默认的中间件是非常常见的,基本上把常见的上次内容帮你解析成req.body