创建app
- `let app = express()`
- `app.get('/path', (req, res) => {res.send('hello')})`
- 其中`req.app`也可以拿到app对象
- `app.post`
- `app.listen(8080)`
中间件
- `app.use((req, res, next) => {… next()})`使用中间件,如果next中有参数,则会处罚错误处理中间件
- 应用:判断用户是否已经登录,是否有权访问当前页面;网站临时下线通知
- 处理错误的中间件
- `app.use((err, req, res, next) => {})`
请求对象
- `req.query`: url中的参数
- `req.body`: post请求中的参数
- 默认express不会处理post请求中的body数据,需要通过express的body-parser中间件,可以判断req中是否有数据,如果有则将数据解析成对象,放在req的body属性中,再调用next函数,执行下一个中间件
- `app.use(bodyParser.urlencoded({extended: false}))`使用
- 其中extended表示是否使用第三方qs模块处理req中的请求参数,为false,表示使用系统的querystring模块处理
响应对象
- `res.status(404)`
- `res.send(obj)`
路由使用
- `route = express.Route()`
- 创建一个路由对象
- `route.get('/path', (req, res) => {})`
- 处理请求
- 路由参数
- `route.get('/path/:id', (req, res) => {})`
- 通过`req.params`获得
- `app.use('/route', route)`
- 应用此路由中间件
- 之后访问`http://lcoalhost:8080/route/path`即可
使用模板
- 需要`express-art-template`模板引擎,是express在art-template上的一次封装
- `app.engine(subfix, templateEngine)`当遇到sufix后缀模板时,使用什么引擎
- `app.set('views', path/to/views)` 设置模板的位置
- `res.render('viewname', {})`返回模板对象给客户端
- 每次传入{}数据太麻烦,尤其是每个模板都需要的数据,通过`app.locals.data = {}`设置模板公共数据
静态资源处理
- 使用`express.static('/path/to/static')`中间件
- `app.use(express.static('staticpath'))`
- 方位时,没有'staticpath'路径,而是'staticpath'下路径开始
`mongoose-sex-page`分页模块
- `let pagenation = require('mongoose-sex-page')`
Cookie
- 根据域名区分Cookie
- 使用`express-session`模块,再`app.use(session({secret: 'key', saveUninitialized: false, cookie: {maxAge: 单位为毫秒} }))`
- 客户端发送的sessionid在`req.session.sessionid中`,配合`res.redirect`实现登录重定向
- 用户登出,删除cookie和session
- `req.session.destroy(function(){res.clearCookie(name)})`
formidable模块,用于解析客户端的表单数据,最终要的是可以实现二进制文件的传输
- `const formidable = require('formidable')`
- `let form = formidable.IncomingForm()`
- `form.uploadDir = path`
- `form.parse(req, function(err, fields, files) {})`
- `fields`是键值对
- `files`与文件有关