express是 基于 Node.js 平台,快速、开放、极简的 Web 开发框架。
很多node后端框架都是基于express构建的,得益于express简单和开放的设计。
此文是基于express4.x 的。
一 安装步骤:
1 安装node环境
2 npm init
3 npm i express --save
二 完成 hello world:
main.js
const express = require('express')
const app = express()
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(3000, () => console.log('Example app listening on port 3000!'))
node main.js 运行即可,浏览器访问http://localhost:3000就会看到返回hello world了
三 理解常用API (中间件的概念最后讲)
1. const app=express()
express模块的顶级导出函数,此函数返回一个express应用实例app.
2. app.use([path,] callback [, callback...])
挂载一个或多个中间件到指定的path上,每次url请求一旦匹配上这个path这个中间件就会被调用,use中件间的顺序就是请求进入中间的顺序。
3. app.get(path, callback [, callback ...])
将get请求路由到指定的处理函数,这个处理函数也可以是一个或多个中间件函数或中间件数组。
4. app.post(path, callback [, callback ...])
同get,但是只路由post请求
5. app.all(path, callback [, callback ...])
路由所有请求
6. app.route(path)
根据path返回一个子app实例,这个子app和原app有着相同的方法,可在子app上再进行路由,可以使路由更加模块化
四 express内置的中间件
1 express.json([option]) 在Express v4.16.0 以上才有
这是一个express的内置中间件,基于body-parser。他会处理Content-type 为json/application请求,产生一个body对象作为request的属性供下一个中间件使用,在option中可以配置会被处理的Content-type,默认为json/application.
2 express.static(root, [options])
挂载静态文件
3 express.urlencoded([options])
类似express.json,它会将请求中的url形式的body的参数格式化成一个对象,作为request的body属性供下一级中间件使用
五 request对象
1 req.app 获得当前的app实例
2 req.baseUrl 获得当前匹配到的url
app.use('/admin', function(req, res, next) { // GET 'http://www.example.com/admin/new'
console.log(req.originalUrl); // '/admin/new'
console.log(req.baseUrl); // '/admin'
console.log(req.path); // '/new'
next();
});
3 req.body 默认是undefined的,在使用了express.json()或其他同类中间件时才会有
4 req.cookies 默认为undefined,在使用了cookie-parser后才有,它会将请求的cookie转化为cookies对象存在req上,如果请求没有携带cookie则为{};
5 req.query 它会将请求url中的参数格式化为一个对象存在query中
六 response对象
res.json() 发送j对象转为json字符串返回
res.send() 可以发送对象,数组,字符串,buffer,对象和数组都会被json化为字符串
res.sendFile() 发送文件
res.end() 快速结束一个响应,在不需要返回任何数据的时候用,一般还是用json,send
res.status() 修改response的status,可以链式调用
res.redirect([status,]path) 请求重定向,path可以是别的网址如 http:// www.baidu.com 也可以是绝对路劲‘/admin/user’,也可以是相对路径‘user/new’
六 中间件
一个express应用实际上就是在调用各种中间件
中间件实际上是一个形式为function([path,],(req,res,next)=>{
// doSomeThing
})
的一个函数
他会在一个请求从进入到服务器到返回客户端的过程中按挂载的顺序一个一个被调用,每个中间件都会接到上一个中间件处理过的request和response,在函数中调用next()相当于通知下一个中间件可以开始执行了,但是不会立刻启动下一个中间件,还是会等待当前函数执行完(如果next()之后还有代码要运行的话);如果不调用next(),下一个中间件将永远不会被执行。
像一些第三方的中间件如body-parser,cookie-parser也是这样的函数,他帮助我们处理原生的http请求产生我们想要的数据存在request的属性里,供下一级中间件使用,我们所写的get,post实际上也是在挂载中间件到指定的path上,app.use也是在挂载中间件。
第三方中间件:
body-parser :解析body中的数据,并将其保存为Request对象的body属性。
cookie-parser :解析客户端cookie中的数据,并将其保存为Request对象的cookie属性
express-session :解析服务端生成的sessionid对应的session数据,并将其保存为Request对象的session属性
query:这个中间件将一个查询字符串从URL转换为JS对象,并将其保存为Request对象的query属性。这个中间件在第四个版本中已经内置了无需安装。