路由
- 路由结构,
app.method(path,[calback...],callback)
- path,服务器上的路径
- callback,当路由匹配时要执行的函数
- 路由路径
- 字符串,
app.get('/about,function(req,res){...})
- 字符串模式
- 正则表达式
- 字符串,
- 路由句柄
- 可以是一个函数
app.get('/',function(req,res){ res.send("hello") })
- 可以是一个函数数组(要有next对象)
app.get('/a',function(req,res,next){ consol.log('first'); next(); },function(req,res){ res.send('second'); }) #这两个函数可以独立出来,然后传入参数的时候传入一个数组,由函数名组成的数组就可以,当然要有next()
- 响应方法
res.download() res.end()//终结相应处理流程 res.json()//发送一个json格式的响应 res.jsonp() res.redirect()//重定向请求 res.render()//渲染视图模板 res.send()//发送各种类型的响应 res.sendFile()//以八位字节流的形式发送文件 res.sendStatus()//设置响应状态代码,并将其一字符串形式作为响应体的一部分发送
-
app.route()
,创建路由路径的链式路由句柄,也就是说规定了一个路由,然后后面链式调用get,post等方法,有助于创建模块化的路由app.route('/book') .get(function(req,res){ res.send('get method') }) .post(function(req,res{ res.send('post method') })) .put(...)
-
express.Router
,创建模块化、可挂载的路由句柄。Router实例是一个完整的中间件和路由系统。
中间件
- 解释:中间件是一个函数,可以访问请求对象、响应对象和web应用中处于请求-响应循环流程中的中间件(也就是被命名为next的变量)
- 应用级中间件
- 一般形式
app.use()
和app.METHOD()
//没有挂载路径的中间件,应用的每个请求都会执行该中间件 app.use(function(req,res,next){ console.log('middleware') next() }) //挂载到/user上面的中间件,任何指向他的请求都会执行下面的函数 app.use('/user',function(req,res,next){ console.log('use') next() }) //路由和句柄函数(中间件系统),处理指向/user的GET请求,如果不是GET不执行!!! app.get('/user',function(req,res){ res.send('GET'); }) //挂载一组中间件 app.use('/user',function(req,res,next){ console.log('first'); next() },function(req,res,next){ console.log('second'); next() })
- 一般形式
- 路由级中间件
- 它绑定的对象为express.Router(),
var router = express.Router()
上面中间级改为路由级,就是将app改为router即可 router.use(function(req,res,next){ console.log('router'); next() })
- 它绑定的对象为express.Router(),
- 错误处理中间件
- 有四个参数,定义错误处理中间件的时候必须使用这四个参数,即使不用,也得全写!不然中间件会被识别为一个常规的中间件,不能处理错误。
app.use(function(err,req,res,next){ console.error(err.stack); res.status(500).send('somthing broke!') })
- 内置中间件
- 唯一的内置中间件
express.static(root,[options])
,负责在Express应用中托管静态资源,root是提供静态资源的根目录,options参数的属性看文档
app.use(express.static('public'))
- 唯一的内置中间件
- 第三方中间件(npm install)
- 例如cookie-parser
模版引擎
- 需要进行的设置
- views,放模版文件的目录,使用:
app.set('views','./fileName)
- view engine,模版引擎, 使用:`app.set('vies engine','jade')
- views,放模版文件的目录,使用:
网友评论