# express-part-analysis **Repository Path**: bingohello/express-part-analysis ## Basic Information - **Project Name**: express-part-analysis - **Description**: 部分Express4.x用法解析 - **Primary Language**: NodeJS - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-03-19 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 部分Express4.x用法解析 ## app.use() > 将中间件安装在某个路由path上,如果path未指定,则默认为"/"。 app.use('/use', function (req, res, next) { name = "zhaozb"; next(); }); app.get('/use', function (req, res) { res.send(name); }); 等于 function middleware(req, res, next) { name = "zhaozb"; next(); }; app.get('/use', middleware, function (req, res) { res.send(name); }); 以上两种写法均可 > 使用中间件时,只要path能够匹配(根据正则匹配),就会执行该中间件。 app.use('/', function (req, res, next) { age = 20; next(); }); app.use('/use', function (req, res, next) { name = "zhaozb"; next(); }); app.get('/use', function (req, res) { res.send("name="+name+", age="+age); }); path为"/"表示可以匹配所有"/"开始的路径,所以也包括"/use" > 路由是有效的中间件 app.use(function (req, res, next) { name = "zhaozb"; next(); }); router.get('/', function (req, res, next) { res.send(name); }); app.use(router); > Express实例也是有效的中间件 const subApp = express(); subApp.get('/', function (req, res, next) { console.log("zhaozb"); next(); }) app.use(subApp); > 在同个路径下装载多个中间件 var r1 = express.Router(); r1.get('/', function (req, res, next) { console.log("我是r1"); next(); }) var r2 = express.Router(); r2.get('/', function (req, res, next) { console.log("我是r2"); next(); }) app.use(r1, r2); //此处也可使用数组方式app.use('/', [r1, r2]); > 还可以采用组合的方式引入中间件 function mw1(req, res, next) { console.log("我是MW1"); next(); } function mw2(req, res, next) { console.log("我是MW2"); next(); } var r1 = express.Router(); r1.get('/', function (req, res, next) { console.log("我是r1"); next(); }); var r2 = express.Router(); r2.get('/', function (req, res, next) { console.log("我是r2"); next(); }); var subApp = express(); subApp.get('/', function (req, res, next) { console.log("我是subApp"); next(); }); app.use(mw1, [mw2, r1, r2], subApp); ## http请求的几种方式(增删改查) app.all("/", function (req, res, next) { console.log("I am All"); next(); }); app.get('/', function (req, res) { res.send("I am Get"); }); app.post('/', function (req, res) { res.send("I am POST"); }); app.put('/', function (req, res) { res.send('I am Put'); }); app.delete('/', function (req, res) { res.send('I am Delete'); }); ## app.engine 注册指定扩展名的的模板引擎 app.engine('html', require('ejs').renderFile); app.set('views', './views'); // 指定模板文件存放位置 app.set('view engine', 'ejs') // 设置默认的模板引擎 详细demo见app.engine文件 ## req.params app.get('/test/:name/:age', function (req, res) { res.send('name = '+req.params.name+', age = '+ req.params.age); }) ## req.query app.get('/test', function (req, res) { res.send(req.query); }) ## req.body 主要是针对post请求参数: 首先安装body-parser数据解析工具 npm install body-parser 在app.js中引入 var bodyParser = require('body-parser'); app.use(bodyParser()); app.engine('html', require('ejs').renderFile); app.set('views', './views'); // 指定模板文件存放位置 app.set('view engine', 'html') // 设置默认的模板引擎 app.get('/', function (req, res) { res.render('index'); }) app.post('/', function (req, res) { res.send(req.body); }) ## res.cookie res.cookie('cart', {items: [1,2,3]}); //设置cookie信息 ## req.cookies npm install cookie-parser 这样就可以使用req.cookie获取cookie var cookieParser = require('cookie-parser'); app.use(cookieParser()); app.get('/', function (req, res) { console.log(req.cookies); res.send(); });