express.js基础总结
express路由对比
node原生
1 app.on('request',(req,res)=>{ 2 // 获取路径 3 let {pathname } = url.parse(req.url) 4 // 对路径进行判断 不同路径响应不同内容 5 if(pathname == '/' || pathname === 'index'){ 6 res.end('欢迎来到主页') 7 }else if (pathname == 'list') { 8 res.end('欢迎来到列表页面') 9 } 10 })
express
1 app.get('/',(req,res)=>{ 2 res.send('HelloExpress') 3 }) 4 app.post('/',(req,res)=>{ 5 res.send('post请求') 6 })
获取请求参数的对比
node原生
1 app.on('request',(req,res)=>{ 2 // 获取get 3 let {query} = url.parse(req.url,true); 4 // 获取post 5 let postDate = '' 6 req.on('data',(chunk)=>{ 7 postDate +=chunk 8 }) 9 req.on('end',()=>{ 10 console.log(querystring.parse(postData)) 11 }) 12 })
express
1 app.get('/', (req, res) => { 2 // 获取GET参数 3 console.log(req.query); 4 }); 5 6 app.post('/', (req, res) => { 7 // 获取POST参数 8 console.log(req.body); 9 })
express创建web服务器很简单
1 // 引入Express框架 2 const express = require('express'); 3 // 使用框架创建web服务器 4 const app = express(); 5 // 当客户端以get方式访问/路由时 6 app.get('/', (req, res) => { 7 // 对客户端做出响应 send方法会根据内容的类型自动设置请求头 8 res.send('Hello Express'); // <h2>Hello Express</h2> {say: 'hello'} 9 }); 10 // 程序监听3000端口 11 app.listen(3000);中间件
中间件
就是一堆方法,可以接受客户端发来的请求,可以对请求作出响应,也可以将请求继续教改下一个中间件继续处理

中间件的构成
中间件主要是由二部分构成,中间件方法以及请求处理函数。中间件方法由express提供,负责拦截请求,请求处理函数由开发人员提供,负责人处理请求。
1 app.get('请求路径', '处理函数') // 接收并处理get请求 2 app.post('请求路径', '处理函数') // 接收并处理post请求
可以针对同一个请求设置多个中间件,对同一个请求进行多次处理。默认情况下,请求从上到下依次匹配中间件,一旦成功匹配成功,终止匹配。
可以调用next方法将请求控制权交给下一个中间。直到遇到结束请求的中间件。
1 app.get('/request',(req,res,next)=>{ 2 req.name = "张三" 3 next() 4 }) 5 app.get('/request',(req,res)=>{ 6 res.send(req.name) 7 })
app.use中间件
app.use匹配所有的请求方式,可以直接传入请求处理函数,代表接受所有的请求。
1 app.use((req, res, next) => { 2 console.log(req.url); 3 next(); 4 });
app.use第一个参数也可以传入请求地址,代表无论什么请求方式,只要是这个请求地址就接受这个请求
1 app.use('/admin',(req,res,next)=>{ 2 console.log(req.url) 3 next() 4 })
中间件的应用
路由保护,客户端在访问登录页面是,可以使用中间件判断用户登录状态,用户如果未登录,则拦截请求,直接响应,禁止用户进入需要登录的页面
网站维护状态,在所有路由的最上面定义接受所有请求的中间件,直接为客户端作出响应,网站正在维护
自定义404页面
错误中间件
在程序执行的过程中,不可避免的会出现一些无法预料的错误,比如文件读取失败,数据库连接失败。错误处理中间件是一个集中处理错误的地方
1 app.use((err,req,res,next)=>{ 2 res.status(500).send('服务器发生未知错误') 3 })
当程序出现错误时,调用next(),并且将错误信息通过参数的形式传递给next(),即可触发错误处理中间件
1 app.get("/",(req,res,next)=>{ 2 fs.readFile("/file-does-not-exist",(err,data)=>{ 3 if(err){ 4 next(err) 5 } 6 }) 7 })
错误捕获
在node中异步api的错误处理信息是通过回调函数获得的,支持Promise对象的异步api发生错误的可以通过catch来捕获到。异步函数执行如果发生错误要如何捕获错误。
try catch可以捕获异步函数及其其他同步代码在执行过程中发生的错误,但是不能是其他的类型的API发生的错误。
1 app.get('/',async(req,res,next)=>{ 2 try { 3 await User.find({name:"张三"}) 4 } catch (err) { 5 next(err) 6 console.log(err) 7 } 8 })
Express框架请求处理
构建模块的路由
1 const express = require('express') 2 3 const home = require('./route/home.js') 4 const admin = require('./route/admin.js') 5 6 app.use('/home',home) 7 app.use('/admin',admin) 8 9 app.listent(3000) 10 11 // app.js
1 const router = express.Router() 2 router.get('/index',(req,res)=>{ 3 res.send('123123') 4 }) 5 module.exports = admin 6 7 //router.js
静态资源的处理
通过Express内置的express.static可以方便的托管静态文件,img css JavaScript
1 app.use('./uploads',exprss.static(__dirname + '/uploads'))

浙公网安备 33010602011771号