express
express概念:express是基于nodejs的HTTPS模块构建出来的一个web应用开发框架,在nodejs之上扩展了 Web 应用所需的基本功能。
本质上express应用就是调用各类中间件。node
中间件:一个处理某个功能或模块的函数,一个中间件对应一个要处理的小任务。
功能:
一、修改请求和响应对象
二、终结请求-响应循环
三、调用堆栈中的下一个中间件。web
示例:
var express=require("express") //引入express框架
var app = express() //建立app应用express
//app.use() 调用中间件
//若是中间件没有挂载点,不管什么请求都会执行该代码
app.use(function(req,res,next){
console.log(req.cookie);
next();
})cookie
// '/admin/:id'是挂载点,当要请求这个路径,就会执行下面的代码 一个中间件栈必需要调用终止请求-响应循环方法
app.use('/admin/:id',function(req,res,next){
console.log(req.user.id);
next();
},function(req,res,next){
res.end(req.params.id); // 执行结束方法终止请求-响应循环,(end(),send()..均可以终止)
})app
// 同一个挂载点,这个永远不会被调用
app.use('/admin/:id',function(req,res,next){
res.send('User Info');
})框架
中间件五大类:
一、应用级中间件
二、路由级中间件
三、错误处理中间件
四、内置中间件
五、第三方中间件函数
应用级中间件:绑定到app对象上的中间件(app.use()或app.method()),以上示例都是应用级中间件
路由级中间件:绑定到express.Router()对象上的中间件
以上示例改一下就变成路由级ui
var express=require("express")
var app = express()
var router = express.Router()
router.use(function (req, res, next) {
console.log('Time:', Date.now());
next();
});
// 将路由挂载至应用
app.use('/', router);spa
路由级中间件和应用级中间件的区别是:
当var app=express()的时候就已经建立了一个application,在application内部就建立了一个Router,大部分对application的操做实际上被重定向到Router了。
例子:
app.use() 至关于 app._router.use()
因此application是Router的封装,Router才是核心router
错误处理中间件:有4个参数(err,req,res,next)
app.use(function(err, req, res, next) {
console.error(err.stack);
res.status(500).send('Something broke!');
});
内置中间件:express.static 是 Express 惟一内置的中间件。
将静态资源文件所在的目录做为参数传递给 express.static 中间件就能够提供静态资源文件的访问
app.use('/public',express.static('public'));
第三方中间件:
安装并加载一个解析 cookie 的中间件: cookie-parser
var express = require('express');
var app = express();
var cookieParser = require('cookie-parser');
// 加载用于解析 cookie 的中间件
app.use(cookieParser());
总结:中间件是一个处理函数
欢迎指正!