【Node.js】第八章 express编写接口

news2025/7/26 7:25:48

目录

1.  编写接口

1.1 编写GET接口

2.2 编写POST接口

2. 接口跨域问题

2.1 跨域问题

2.2 使用cors中间件解决跨域问题

2.3 CORS

​2.4 JSONP接口


1.  编写接口

1.1 编写GET接口

2.2 编写POST接口

 

2. 接口跨域问题

2.1 跨域问题

2.2 使用cors中间件解决跨域问题

cors是express的第一个第三方中间件,通过安装和配置cors中间件,可以很方便地解决跨域问题。步骤如下:

1. 运行npm install cors安装中间件

2. 使用const cors = require('cors')导入中间件

3. 在路由之前调用app.use(cors())配置中间件

2.3 CORS

1. CORS的概念

CORS(Cross-Origin Resource Sharing,跨域资源共享)由一系列HTTP响应头组成,这些HTTP响应头决定浏览器是否阻止前端JS代码跨域获取资源。 

浏览器的同源安全策略默认会阻止网页“跨域”获取资源。但如果接口服务器配置了CORS相关的HTTP响应头,就可以解除浏览器的跨域访问限制。

CORS主要在服务器端进行配置,客户端浏览器无须做任何配置,即可请求开启了CORS的接口。

CORS在浏览器中有兼容性,只有支持XMLHttpRequest Level2的浏览器,才能正常访问开启了CORS的服务器接口(IE10+、Chrome4+、FireFox3.5+) 

2. CORS相关的三个响应头

  • Access-Control-Allow-Origin
  • Access-Control-Allow-Headers
  • Access-Control-Allow-Methods

默认请求下,CORS仅支持客户端发起GET、POST、HEAD请求

如果客户端希望通过PUT、DELETE等方式请求服务器资源,则需要在服务器端,通过Access- Control-Methods来指明实际请求所允许使用的HTTP方法。

// 只允许GET、POST、DELETE、HEAD请求
res.setHeader('Access-Control-Allow-Methods','GET','POST','DELETE','HEAD')

// 允许所有请求
res.setHeader('Access-Control-Allow-Methods','*')

 3. CORS请求分类

分类:

  • 简单请求:
    • 请求方式是GET、POST、HEAD三者之一
    • HTTP头部信息不超过以下九个字段:无自定义头部字段、Accept、Accept- Language、Content- Language、DPR、Downlink、Save-Data、View-Width、Width、Content-Type
  • 预检请求
    • 请求方式为GET、POST、HEAD之外的请求Method类型
    • 请求头中包含自定义头部字段
    • 向服务器发送了application/json格式的数据

在浏览器与服务器正式通信之前,浏览器会先发送OPTION请求进行预检,以获知服务器是否运行该实际请求,所以只一次的OPTION请求称为“预检请求”,服务器成功响应预检请求后,才会发生真正的请求,并携带真实数据。

 2.4 JSONP接口

// 定义jsonp接口的具体实现
app.get('/api/jsonp', (req, res) => {
    // 1. 得到函数名称
    const funName = req.query.callback;
    // 2. 定义要发送给客户端的数据
    const data = { name: 'sun', age: '20' };
    // 3. 拼接出一个函数调用
    const str = `${funName}(${JSON.stringify(data)})`;
    // 4. 把拼接的字符串响应给客户端
    res.send(str);
})

在网页中 使用jquery发起jsonp请求: 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

家里Win7电脑如何连接公司Win10电脑?快解析+远程桌面

什么是远程桌面?通俗地讲,就是可以在任何地点登陆位于其他地点的电脑,可以看到远程登陆电脑的一切东西,可以进行添加、改变、删除文件等任何操作,就像自己在那台电脑前操作一样。远程桌面有丰富的应用场景,…

如何在TIA博途中在线更新PLC的CPU固件版本?

如何在TIA博途中在线更新PLC的CPU固件版本? S7-1200PLC最新的V4.6.0版本的固件出来了,本次就以V4.6版本的固件为例,演示如何在博途中对PLC的固件版本进行更新。 (为防止更新过程中出现意外,强烈建议对PLC的程序进行备份!备份!备份!) 如下图所示,打开某个项目,选中PL…

nm命令使用详解,让你加快学习速度

nm 命令详解 符号是每个ELF文件的一个重要部分,因为它保存了程序实现或使用的所有(全局)变量和函数。符号表中保存了查找程序符号、为符号赋值、重定位符号所需要的全部信息。Linux中 nm用来列出目标文件的符号表;如果nm指令没有指出目标文件,则nm假定目…

模拟电路设计(34)---脉宽调制型开关电路

在开关稳压电源中,直流变换器中的功率晶体管工作在开关状态。目前开关电源的工作频率在几百kHz,有些甚至已经到了MHz量级。如下图所示是DC-DC开关变换器的原理框图: ​DC-DC开关变换器的原理框图 开关电源的实现方式有很多种,如最…

[附源码]Python计算机毕业设计二手图书回收销售网站

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Spring:AOP事务管理(14)

Sprin事务Spring事务简介相关概念介绍转账案例-需求分析转账案例-环境搭建事务管理Spring事务角色Spring事务属性事务配置转账业务追加日志案例事务传播行为Spring事务简介 相关概念介绍 事务作用:在数据层保障一系列的数据库操作同成功同失败。Spring事务作用&am…

电子作业票系统:消除安全管理漏洞,科技赋能企业业务洞察

电子作业票系统采用定位、物联网、人脸识别、大数据技术对现场作业进行严格管控;通过风险大数据风险辨识模型,实现作业风险辨识,对动火、高处、受限空间、临时用电、吊装、断路、管线打开、挖掘作业等特殊作业票证智能化管理。 在危化企业实际…

Excel VS BI,谁才是真正的大数据分析工具?

有人说,Excel能聚合运算,能分析,能做数据分析报表。而BI数据分析工具,看上去也就是做出来的报表更好看一些。事实真的是这样吗?当然不是。外行人看热闹,内行人看门道,BI数据分析工具比起Excel更…

访问权限控制

访问控制目的 在实际的组织中,为了完成组织的业务工作,需要在组织内部设置不同的职位,职位既表示一种业务分工,又表示一种责任与权利。根据业务分工的需要,职位被划分给不同群体,各个群体的人根据其工作任…

零代码极限封装的【接口自动化测试框架】震碎你的三观

随着互联网寒冬的到来,测试行业裁员的裁员,找工作的找工作,内卷越来越加剧,那么选择一个学习提升的平台尤为重要,接下来我要说的事情将震碎你的三观,震掉你的眼球,和每个测试人息息相关&#xf…

图像处理 QImage

在Qt中有四种处理图像的方法: QImage :使用I/O ,可以对像素进行处理QPixmap:主要用在屏幕的显示QBitmap: QPixmap的子类,处理颜色深度,只能显示黑白两种颜色,用于遮罩QPicture&…

Qt通过Doc模式读取XML并设计一个增删改查方便的一个操作类

前言 如果对开源库TinyXml有兴趣的可以去看看这篇文章。 C使用TinyXml(开源库)读取*.XMl文件 目录前言DOC 文档对象模型QtXML基本结构操作XML部署环境添加信息头读取XML文件添加根节点添加一个没有属性的节点添加一个有属性的节点添加一个元素节点给节点单独设置属性删除所有同…

开源软件安全与应对策略探讨 - Java 机密计算技术应用实践

据统计,90% 以上的应用都在使用第三方软件库,这些软件大部分都是开源的。与此同时,有超过一半的全球 500 强公司都在使用存在漏洞的开源软件。这幅漫画生动的描述了一个大型应用软件的组件架构,它可能建立在一个极其脆弱的开源组件…

SpringBoot整合Swagger2+Knife4j,注解使用

SpringBoot整合Swagger2Knife4j,注解使用 文章目录SpringBoot整合Swagger2Knife4j,注解使用前言一、swagger是什么?二、使用步骤1.引入库2.使用swagger的相关注解总结前言 swagger和postman都是后端编写的测试接口使用方式,由于实际开发的需求和使用习惯…

基于springboot的汽车租赁管理系统的设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

pytorch实现mnist手写数字识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章地址: 365天深度学习训练营-第P1周:mnist手写数字识别🍖 作者:K同学啊一、 前期准备 1. 设置GPU import torch import torch.nn a…

MySQL8.0爬坑二三事

【下载】 地址:MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/ 【安装】 1.解压复制下面一堆文件到你需要的路径 2.如下图添加一个data文件夹,专门来放数据 3.新建一个my.ini的配置文件,里面内如如下 4…

如何将草料二维码收集到的表单信息同步至腾讯文档

在进行工业巡检场景如消防栓检查时,需要到达巡检地点后,扫描草料二维码,然后填写巡检的结果。事后,还需要有一个工作人员将草料二维码中的信息手动复制粘贴至腾讯文档中。那么能不能将我们信息填写后,自动就汇总至腾讯…

检索系统设计方案(重构)

记一次系统重构设计背景介绍设计步骤架构图介绍架构设计注意点总结背景介绍 搜索链路主要部分 搜索引擎链路都包含这三部分,数据源、搜索引擎服务、搜索业务。 是不是很简单,感觉搜索也没那么难? 搜索链路确实都包括这三部分,…

编程参考 - 编程中给变量起名时如何选择前缀,以及匈牙利命名法等

我最开始当程序员用C语言写代码,公司里推行编码规范,变量的前缀都是有规定的。 比如整型变量,前面都是 u8Name, i8Name, u16Name, i16Name之类的。 尤其是嵌入式编程,涉及到代码移植的问题,最好使用和平台无关的类型定…