【nodejs】Express概念与使用介绍

Express

Express是基于Node.js平台,从内置模块http封装出来的第三方模块,可以更方便的开发Web服务器。

中文官网: http://www.expressjs.com.cn/

一、基本使用

// 导入express
const express = require('express')
// 创建web服务器
const app = express()
// 调用app.listen绑定端口,启动服务器
app.listen(80, () => {console.log('express server running at http://127.0.0.1')
})app.get('/', (req, res) => {// 通过req.query对象查询字符串形式发送给服务器的参数console.log(req.query)
})app.get('/user/:id', (req, res) => {// 通过req.params对象匹配:形式的动态参数console.log(req.query)
})

二、Express中的路由

路由是指客户端请求与服务器处理函数中间的映射关系。

// 基本格式
app.METHOD(PATH, HANDLER)

模块化路由

为了方便对路由进行模块化的管理,Express 不建议将路由直接挂载到 app 上,而是推荐将路由抽离为单独的模块。

创建路由模块
var express = require('express')
var router = express.Router()// 挂载路由
router.get('/user/list', function(req, res) {res.send('get user list.')
})
router.post('/user/add', function(req, res) {res.send('add new user')
})// 导出路由
module.exports = router
注册路由
// 导入路由模块
const userRouter = require('./router/user.js')
// 注册
app.use(userRouter)
// 指定前缀注册
app.use('/api', userRouter)

三、Express中间件

关键词:中间处理环节,预处理。

全局中间件

const mw = function(req, res, next) {...next()
}// 全局生效的中间件
// 如注册多个,则按注册先后顺序生效
app.use(mw)

局部生效的中间件

const mw1 = function(req, res, next) {...next()
}// 注册局部生效的中间件
app.get('/', mw1, function(req, res) {res.send('home page.')
})//通过如下等价方式使用多个局部中间件:
app.get('/', mw1, mw2, (req, res) => {})
app.get('/', [mw1, mw2], (req, res) => {})

中间件的分类

1、应用级别

注册在app上

2、路由级别

注册在路由上

3、错误级别

必须有 4 个形参,形参顺序从前到后,分别是 (err, req, res, next)。

注:错误级别中间件需注册在所有路由之后。

4、Express内置中间件
// 创建一个静态资源服务器
app.use(express.static('public'))
// 配置解析 application/json 格式数据内置中间件
app.use(express.json())
// 配置解析 application/x-www-form-urlencoded 格式数据的内置中间件
app.use(express.urlencoded({ extended: false} ))
5、第三方中间件

如 body-parser。

手写一个第三方中间件。

四、跨域资源共享

CORS方案

CORS (Cross-Origin Resource Sharing,跨域资源共享)由一系列 HTTP 响应头组成,这些 HTTP 响应头决定
浏览器是否阻止前端 JS 代码跨域获取资源。
浏览器的同源安全策略默认会阻止网页“跨域”获取资源。但如果接口服务器配置了 CORS 相关的 HTTP 响应头,
就可以解除浏览器端的跨域访问限制。

image-20231229152125625

CORS响应头
// origin指定了允许访问该资源的外域URL
res.setHeadler('Access-Control-Allow-Origin', 'http://lrhealth.com')
res.setHealder('Access-Control-Allow-Origin', '*')// Headers指定额外的请求头字段
res.setHealder('Access-Control-Allow-Headers', 'Content-Type, X-Custom-Header')// Methods指定了额外的请求方式
res.setHeader('Access-Control-Allow-Methods', 'POST, GET, DELETE, HEAD')
res.setHeader('Access-Control-Allow-Methods', '*')
CORS请求的分类
  • 简单请求
  • 预检请求

包含额外请求方式,或自定义头部字段,或请求体为application/json格式的数据的请求为预检请求,其他为简单请求。

预检请求,浏览器会先发送 OPTION 请求进行预检,以获知服务器是否允许该实际请求。

JSONP方案(了解)

浏览器端通过 <script> 标签的 src 属性,请求服务器上的数据,同时,服务器返回一个函数的调用。这种请求数据的方式叫做 JSONP。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/307147.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

18B20受到LED灯的干扰处理方法

鱼缸使用了18B20测温&#xff0c;采用PWM控制加热棒加热占空比的方法控制鱼缸温度&#xff0c;使用了最简单的温度差调整PWM宽度的方法&#xff0c;温度差越大PWM占空比越大&#xff0c;从而产生更多的加热时间&#xff0c;当温度接近设定值的时候&#xff0c;PWM逐步缩小&…

芋道视频199 - 工作流 - 关系图 - ruoyi-vue-pro

一 新建表单 数据库&#xff1a;bpm_form。实体类&#xff1a;BpmFormDO.java&#xff1a; 二 流程模型、流程部署、流程定义 1 第1步&#xff1a;创建流程模型 页面操作&#xff1a;实体类&#xff1a;Model.java。数据库&#xff1a;ACT_RE_MODEL 流程模板信息表&#xf…

纯CSS实现马里奥效果,回忆一下童年吧

&#x1f4e2; 鸿蒙专栏&#xff1a;想学鸿蒙的&#xff0c;冲 &#x1f4e2; C语言专栏&#xff1a;想学C语言的&#xff0c;冲 &#x1f4e2; VUE专栏&#xff1a;想学VUE的&#xff0c;冲这里 &#x1f4e2; CSS专栏&#xff1a;想学CSS的&#xff0c;冲这里 &#x1f4…

gin框架使用系列之三——获取表单数据

系列目录 《gin框架使用系列之一——快速启动和url分组》《gin框架使用系列之二——uri占位符和占位符变量的获取》 一、获取get参数 get请求的参数是直接加在url后面的&#xff0c;在gin中获取get请求的参数主要用Query()和DefaultQuery()两个方法&#xff0c;示例代码如下…

**Python**综合案例

Python综合案例 一、系统需求分析 1、需求分析 使用面向对象编程思想完成学员管理系统的开发,具体如下: ① 系统要求:学员数据存储在文件中 ② 系统功能:添加学员、删除学员、修改学员信息、查询学员信息、显示所有学员信息、保存学员信息及退出系统等功能。 2、角色…

ArcGIS高程点生成等高线

基本步骤&#xff1a;数据清洗→创建TIN→TIN转栅格→等值线→平滑线。 1.&#xff08;重要&#xff09;数据清理&#xff1a;删除高程点中的高程异常值数据。 2.创建TIN:系统工具→3D Analyst Tools→数据管理→TIN→创建TIN&#xff08;可直接搜索工具TIN&#xff09;。 单击…

【Linux】基本指令二

这篇博客是对于上篇博客的指令的延续 上篇博客我们说了删除目录或普通文件的命令rm&#xff0c;下面是一些对这个指令的补充&#xff0c;我们知道当root用户删除文件时&#xff0c;系统会问是否要删除&#xff0c;而对于普通用户则不会 那我们如果就想让系统问一下呢&#x…

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第五节 引用类型复制问题及用克隆接口ICloneable修复

深入浅出图解C#堆与栈 C# Heaping VS Stacking 第五节 引用类型复制问题及用克隆接口ICloneable修复 [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节…

Oracle数据库查询表空间使用情况

SELECTa.a1 表空间名称,c.c2 类型,c.c3 区管理,b.b2 / 1024 / 1024 表空间大小M,(b.b2-a.a2)/ 1024 / 1024 已使用M,substr((b.b2-a.a2)/ b.b2*100, 1, 5) 利用率 FROM(SELECTtablespace_name a1,sum(nvl(bytes, 0)) a2FROMdba_free_spaceGROUP BYtablespace_name) a,(SELECTta…

GBASE南大通用数据库提供的高可用负载均衡功能

GBASE南大通用GBase 8a ODBC 提供的高可用负载均衡功能是指&#xff0c;GBase 8a ODBC 会将客户 端请求的数据库集群连接平均分摊到集群所有可用的节点上。 GBASE南大通用数据库负载均衡的使用方法 GBASE南大通用GBase 8a ODBC 提供两种方式来使用高可用负载均衡。一种是配置数…

模拟电路基础知识笔记,你想知道的都有,建议收藏!

大家总说模电知识总是学不会&#xff0c;IC修真院为大家整理了模拟电子基础知识&#xff0c;看看你掌握了多少&#xff0c;文末可以获取全部哦。 文末可领全部文档 1、PN结是晶体二极管的基本结构&#xff0c;也是一般半导体器件的核心。 2、 射极输出器没有电压放大能力&am…

【Leetcode 39】组合总和 —— 回溯法

39. 组合总和 给你一个无重复元素的整数数组candidates和一个目标整数target &#xff0c;找出candidates中可以使数字和为目标数target的 所有不同组合&#xff0c;并以列表形式返回。你可以按**任意顺序 **返回这些组合。 candidates中的同一个数字可以 无限制重复被选取 。…