node收藏技术

Express框架

2021-12-05  本文已影响0人  叽里咕呱

一、Express框架

(1)定义

Express是一个基于Node平台的web应用开发框架,它提供了一系列的强大特性,帮助你创建各种Web应用。
使用 npm install express 命令进行下载。

(2)Express框架特性

① 提供了方便简洁的路由定义方式
② 对获取HTTP请求参数进行了简化处理
③ 对模板引擎支持程度高,方便渲染动态HTML页面
④ 提供了中间件机制有效控制HTTP请求
⑤ 拥有大量第三方中间件对功能进行扩展

二、基本使用步骤

(1)引入Express框架

let express = require('express')

(2)使用框架创建web服务器

通过express函数,创建并返回一个web服务器对象。

let app = express()

(3)程序监听端口

启动服务器,并监听一个端口号(端口号是自定义的)。

app.listen(8848,()=>{
    console.log('服务器成功开启,端口号是8848');
})

(4)客户端访问路由

启动服务器,并监听一个端口号(端口号是自定义的)。

// 当客户端以get方式访问/路由时
app.get('/', (req, res) => {
   // 对客户端做出响应,send方法会根据内容的类型自动设置请求头
   res.send('Hello Express'); // <h2>Hello Express</h2>   {say: 'hello'}
});

三、路由

路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET、POST 等) 组成的,涉及到应用如何响应客户端对某个网站节点的访问。

(1)客户端以get方式访问 / 路由

app.get('/', (req, res) => {
   // 对客户端做出响应
   res.send('使用get方式请求了/路由'');
});

(2)客户端以post方式访问 /add 路由

app.post('/add', (req, res) => {
   res.send('使用post方式请求了/add路由');
});

(3)使用get/post方式访问 /add 路由

所有方式,app.all()优先级最高。

app.all('/add',(req,res)=>{
   res.send('使用get/post方式请求了/add路由');
})

四、中间件

1、中间件定义

中间件就是一堆方法,可以接收客户端发来的请求、可以对请求做出响应,也可以将请求继续交给下一个中间件继续处理。
中间件主要由两部分构成,中间件方法以及请求处理函数。中间件方法由Express提供,负责拦截请求;请求处理函数由开发人员提供,负责处理请求。

app.get('请求路径', '处理函数') // 接收并处理get请求
app.post('请求路径', '处理函数') // 接收并处理post请求

可以针对同一个请求设置多个中间件,对同一个请求进行多次处理。默认情况下,请求从上到下依次匹配中间件,一旦匹配成功,终止匹配。可以调用next方法将请求的控制权交给下一个中间件,直到遇到结束请求的中间件。

app.get('/request', (req, res, next) => {
      req.name = "张三";
      next();
});
app.get('/request', (req, res) => {
      res.send(req.name);
});

2、app.use中间件用法

app.use 匹配所有的请求方式,可以直接传入请求处理函数,代表接收所有的请求。所有的请求,都会先走use,作用是拦截器。
实际开发中,我们可以通过use中间件方法去判断用户的权限,从而确定该用户能否继续请求相关接口。

app.use((req,res,next)=>{
    console.log(req.url);
    // next方法,表示继续往下执行
    next()
})

app.use 第一个参数也可以传入请求地址,代表不论什么请求方式,只要是这个请求地址就接收这个请求。

app.use('/admin', (req,res,next)=>{
    console.log(req.url);
    // next方法,表示继续往下执行
    next()
})

3、中间件应用

(1)路由保护,客户端在访问需要登录的页面时,可以先使用中间件判断用户登录状态,用户如果未登录,则拦截请求,直接响应,禁止用户进入需要登录的页面。
(2)网站维护公告,在所有路由的最上面定义接收所有请求的中间件,直接为客户端做出响应,网站正在维护中。
(3)自定义404页面。

4、错误处理中间件

在程序执行的过程中,不可避免的会出现一些无法预料的错误,比如文件读取失败,数据库连接失败。
错误处理中间件是一个集中处理错误的地方。

app.use((err, req, res, next) => {
   res.status(500).send('服务器发生未知错误');
})

当程序出现错误时,调用next()方法,并且将错误信息通过参数的形式传递给next()方法,即可触发错误处理中间件。

app.get("/", (req, res, next) => {
   fs.readFile("/file-does-not-exist", (err, data) => {
       if (err) {
          next(err);
       }
   });
});

5、捕获错误

在node.js中,异步API的错误信息都是通过回调函数获取的,支持Promise对象的异步API发生错误可以通过catch方法捕获。
异步函数执行如果发生错误,通过 try...catch 可以捕获异步函数以及其他同步代码在执行过程中发生的错误。

app.get("/", async (req, res, next) => {
   try {
       await User.find({name: '张三'})
   }catch(ex) {
       next(ex);
   }
});

五、跨域

1、定义

同源策略:是浏览器的一种安全策略。
同源:协议名、主机名(域名或ip地址)、端口号必须完全相同。
跨域:就是违背同源策略。
ajax请求,必须要遵循同源策略。

2、解决跨域

(1)JSONP

JSONP是一个非官方的跨域解决方案。JSONP 就是利用script标签的跨域能力来发送请求的,只支持get请求。
例如:img、link、iframe、script。

(2)CORS

CORS跨域资源共享,是官方的跨域解决方案。
跨源资源共享标准新增了一组HTTP首部字段,允许服务器声明哪些源站通过浏览器有权限访问哪些资源。
设置响应头,允许跨域请求:

response.setHeader('Access-Control-Allow-Origin','*')

允许自定义请求头信息,响应头*表示所有类型的头信息都可以接受:

response.setHeader('Access-Control-Allow-Headers','*')

六、get请求

1、get请求参数的获取

req.query接收前端传递的GET请求参数,框架内部会将GET参数转换为对象并返回。
接收地址栏中问号后面的参数,例如: http://localhost:3000/getStudents?name=zhangsan&age=30

app.get('/getStudents',(req,res)=>{
    console.log(req.query);  // {"name": "zhangsan", "age": "30"}
})

2、定义get请求接口

req是请求对象,里面保存的是客户端传过来的请求参数。
res是响应对象,用于给客户端响应结果。
res.send()将结果返回给前端。

app.get('/getStudents',(req,res)=>{
    console.log(req.query);  // 获取GET参数
    res.send('hello')
})

七、post请求

1、post请求参数的获取

req.body接收前端传递过来的POST请求参数。

接收POST请求参数,服务器需要进行设置。
(1)通过express.json()中间件,解析表单中的JSON格式数据。
(2)通过express.urlencoded()中间件,解析表单中的url-encoded格式数据。

// 设置允许接收json格式的数据({"name":"张三","age":20})
app.use(express.json())
// 设置允许接收urlencoded格式的数据("name=张三&age=20")
app.use(express.urlencoded({extended:false}))

2、定义post请求接口

app.post('/add', (req, res) => {
    console.log(req.body);  // 获取POST参数
    res.send('hello')
})

八、静态资源的处理

通过Express内置的express.static可以方便地托管静态文件,例如img、CSS、JavaScript 文件等。
设置后,public 目录下面的文件就可以访问了。

app.use(express.static('public'));
上一篇下一篇

猜你喜欢

热点阅读