Express 是一个自身功能极简,完全是由路由和中间件构成一个的 web 开发框架:
从本质上来说,一个 Express 应用就是在调用各种中间件。
中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)), 响 应对象(response object (res)), 和 web 应用中处理请求-响应循环流程中的中间件,一般 被命名为 next 的变量。
中间件的功能包括 :
- 执行任何代码。
- 修改请求和响应对象。
- 终结请求-响应循环。
- 调用堆栈中的下一个中间件。
如果 get、post 回调函数中,没有 next 参数,那么就匹配上第一个路由,就不会往下匹 配了。如果想往下匹配的话,那么需要写 next()
Express 应用可使用如下几种中间件:
- 应用级中间件
- 路由级中间件
- 错误处理中间件
- 内置中间件
- 第三方中间件
应用级中间件
/**
中间件:就是匹配路由之前和匹配路由之后做的一系列的操作
//权限判断 :没有登录 跳转到登录页面,登录以后就显示登录以后的页面
*/
var express=require('express'); /*引入*/
var app=new express(); /*实例化*/
/*
中间件 表示匹配任何路由
应用级中间件
next() 路由继续向下匹配
* */
app.use(function(req,res,next){
console.log(new Date());
next();
})
app.use('/news',function(req,res,next){
console.log('新闻路由中间件通过app.use');
next();
})
app.get('/',function(req,res){
res.send('你好express');
})
app.get('/news',function(req,res){
res.send('新闻路由');
})
app.listen(3000,'127.0.0.1');
路由中间件
/**
路由中间件
*/
var express=require('express'); /*引入*/
var app=new express(); /*实例化*/
app.get('/',function(req,res){
res.send('你好express');
})
app.get('/news',function(req,res,next){
console.log('这是路由中间件');
next();
})
app.get('/news',function(req,res){
res.send('这是路由中间件news');
})
app.listen(3000,'127.0.0.1');
错误处理中间件
/**
* Created by Administrator on 2017/8/5 0005.
*/
var express=require('express'); /*引入*/
var app=new express(); /*实例化*/
app.get('/',function(req,res){
res.send('你好express');
})
app.get('/news',function(req,res){
res.send('你好express news');
})
/*匹配所有的路由 404*/
app.use(function(req,res){
res.status(404).send('这是404 表示路由没有匹配到')
})
app.listen(3000,'127.0.0.1');
内置中间件
/**
* Created by Administrator on 2017/8/5 0005.
*/
var express=require('express'); /*引入*/
var app=new express(); /*实例化*/
//内置中间件 托管静态页面
//http://127.0.0.1:3000/css/style.css
// css/style.css
app.use(express.static('public'));
//http://127.0.0.1:3000/static/css/style.css
// css/style.css
app.use('/static',express.static('public'));
app.get('/',function(req,res){
res.send('你好express');
})
app.listen(3000,'127.0.0.1');
第三方中间件
/**
body-parser 中间件 第三方的 获取 post 提交的数据 (模块)
1.cnpm install body-parser --save
2.var bodyParser = require('body-parser')
3.设置中间件
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
4.req.body 获取数据
*/
var express=require('express'); /*引入*/
var bodyParser = require('body-parser');
var app=new express(); /*实例化*/
//配置body-parser中间件
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json());
//ejs
app.set('view engine','ejs');
app.get('/',function(req,res){
res.send('你好express');
})
app.get('/login',function(req,res){
res.render('login');
})
app.post('/doLogin',function(req,res){
console.log(req.body); /*获取post提交的数据*/
})
app.listen(3002,'127.0.0.1');
GET 请求的参数在 URL 中,在原生 Node 中,需要使用 url 模块来识别参数字符串。在Express 中,url req.query POST 请求在 express 中不能直接获得,可以使用 模块。使用后,将可以用
得到参数。但是如果表单中含有文件上传,那么还是需要使用formidable模块。