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'))

 

posted @ 2020-02-23 00:08  爱好跑步的小张  阅读(1145)  评论(0)    收藏  举报