Express接口

1.创建基本的服务器

// 导入express模块
const express = require('express');
const send = require('send');// 创建express的 服务器实例
const app = express()// 启动服务器
app.listen(80, () => {console.log('express server running at ');})

2.创建API路由接口

// 导入express模块
const express = require('express');
const send = require('send');// 创建express的 服务器实例
const app = express()// 导入路由模块
const router = require('./03apiRouter.js')
// 把路由模块 注册到app上
app.use('./api', router)// 启动服务器
app.listen(80, () => {console.log('express server running at ');})

 03apiRouter.js

const express = require('express')
const router = express.Router()// 在这里挂载对应的路由module.exports = router

3.编写get  和  post  接口

入口程序

// 导入express模块
const express = require('express');// 创建express的 服务器实例
const app = express()// 配置解析表单数据的中间件
app.use(express.urlencoded({ extended: false }))// 导入路由模块
const router = require('./03apiRouter.js')
// 把路由模块 注册到app上
app.use('/api', router)// 启动服务器
app.listen(80, () => {console.log('express server running at ');})

 03apiRouter.js

const express = require('express')
const router = express.Router()// 在这里挂载对应的路由
router.get('/get', (req, res) => {// 通过 req.query 获取客户端通过查询字符串,发送到服务器的数据const query = req.queryres.send({// 调用 res.send() 方法,向客户端响应处理的结果status: 0, //0成功,1失败msg: 'Get请求成功',//状态描述data: query  // 需要响应给客户端的数据})
})router.post('/post', (req, res) => {// 通过req.body 获取请求体中包含的url-encoded格式的数据const body = req.bodyres.send({// 调用 res.send() 方法,向客户端响应处理的结果status: 0, //0成功,1失败msg: 'Post请求成功',//状态描述data: body  // 需要响应给客户端的数据})
})module.exports = router

4.跨域问题

4.1解决方案

  • CORS   (主流解决方案,推荐)
  • JSONP (只支持GET请求,有缺陷)

4.2cors

cors中间件解决跨域问题,使用步骤:

  1. 安装中间件    cnpm i cors 
  2. 导入中间件   const cors=require('cors)
  3. 在路由之前,调用中间件  app.use(cors())

cors概念

 cors注意事项

 代码实现

 03apiRouter.js

const express = require('express')
const router = express.Router()// 在这里挂载对应的路由
router.get('/get', (req, res) => {// 通过 req.query 获取客户端通过查询字符串,发送到服务器的数据const query = req.queryres.send({// 调用 res.send() 方法,向客户端响应处理的结果status: 0, //0成功,1失败msg: 'Get请求成功',//状态描述data: query  // 需要响应给客户端的数据})
})router.post('/post', (req, res) => {// 通过req.body 获取请求体中包含的url-encoded格式的数据const body = req.bodyres.send({// 调用 res.send() 方法,向客户端响应处理的结果status: 0, //0成功,1失败msg: 'Post请求成功',//状态描述data: body  // 需要响应给客户端的数据})
})module.exports = router

入口程序

// 导入express模块
const express = require('express');// 创建express的 服务器实例
const app = express()// 配置解析表单数据的中间件
app.use(express.urlencoded({ extended: false }))// 一定要在路由之前,配置中间件cors,从而解决接口跨域问题
const cors = require('cors')
app.use(cors())// 导入路由模块
const router = require('./03apiRouter.js')
// 把路由模块 注册到app上
app.use('/api', router)// 启动服务器
app.listen(80, () => {console.log('express server running at ');})

 

cors响应头部

        Access-Control-Allow-Origin

 

         Access-Ctrol-Allow-Header

        Access-Control-Allow-Methods

cors请求分类

        简单请求

        预检请求

         区别

4.3JSONP

 JSONP概念

// 导入express模块
const express = require('express');// 创建express的 服务器实例
const app = express()// 配置解析表单数据的中间件
app.use(express.urlencoded({ extended: false }))// !!!!!!必须在配置cors之前,配置JSONP接口
app.get('/api/jsonp', (req, res) => {//1. 得到函数名称const funName = req.query.callback// 2.定义要发送给客户端的数据对象const data = { name: 'slx', age: 22 }// 在JavaScript中,对象的属性名是一个标识符,标识符通常是一个没有引号的字符串。// 因此,在定义对象时,对象的属性名不需要加引号。// 3.拼接出函数调用  fun()const scriptStr = `${funName}(${JSON.stringify(data)})`// 4.把拼接对象 响应给客户端res.send(scriptStr)})// 一定要在路由之前,配置中间件cors,从而解决接口跨域问题
const cors = require('cors')
app.use(cors())// 导入路由模块
const router = require('./03apiRouter.js')
// 把路由模块 注册到app上
app.use('/api', router)// 启动服务器
app.listen(80, () => {console.log('express server running at ');})

  03apiRouter.js

const express = require('express')
const router = express.Router()// 在这里挂载对应的路由
router.get('/get', (req, res) => {// 通过 req.query 获取客户端通过查询字符串,发送到服务器的数据const query = req.queryres.send({// 调用 res.send() 方法,向客户端响应处理的结果status: 0, //0成功,1失败msg: 'Get请求成功',//状态描述data: query  // 需要响应给客户端的数据})
})router.post('/post', (req, res) => {// 通过req.body 获取请求体中包含的url-encoded格式的数据const body = req.bodyres.send({// 调用 res.send() 方法,向客户端响应处理的结果status: 0, //0成功,1失败msg: 'Post请求成功',//状态描述data: body  // 需要响应给客户端的数据})
})module.exports = router

5.API、路由、接口的区别和联系

API(Application Programming Interface)、路由(Routing)和接口(Interface)是三个在软件开发中常用的概念,它们在不同上下文中有不同的含义和用途。

**API(Application Programming Interface)**:

- API是应用程序提供给其他程序或开发者使用的接口,用于访问和交互应用程序的功能和数据。
- API定义了一组规则和约定,使得不同的软件可以相互通信和集成,提供了一种标准化的方式让不同的系统之间进行交互。
- 在Web开发中,API通常指用于与后端服务器通信的接口,通过HTTP请求和响应来传递数据,比如RESTful API。

**路由(Routing)**:

- 路由是用于根据URL的不同路径和HTTP请求方法将请求映射到相应的处理程序或控制器的机制。
- 路由的作用是帮助将客户端的请求分发到正确的处理程序,以便执行相应的操作并返回适当的响应。
- 在Web应用程序中,路由定义了不同URL路径与后端代码的映射关系,它可以实现根据请求路径调用不同的业务逻辑处理,并返回相应的结果。

**接口(Interface)**:

- 在编程中,接口是一个抽象的规范,定义了类或对象应该实现的方法和属性,但并不提供具体的实现。
- 接口定义了一组合约,规定了类或对象应该具备的行为,让不同的类可以遵循同样的接口进行开发,从而保持代码的一致性和可扩展性。
- 接口通常用于实现多态性,允许不同的类实现相同的接口,并可以通过接口来调用具体的实现代码。

**联系**:

- 在Web开发中,API和路由有密切的联系。API通常是通过路由来定义的,即将不同的URL路径映射到对应的API处理程序或控制器。API提供了一种规范的方式让客户端可以通过HTTP请求来访问后端服务,而路由则负责将这些请求分发到正确的API处理程序。

- 接口的概念在不同的编程范式中都有应用。在面向对象编程中,接口用于定义类的规范,使得不同的类可以遵循相同的接口进行开发。在Web开发中,API和路由也可以看作是一种接口,它定义了客户端与后端之间的交互规范和映射关系。

综上所述,API、路由和接口是在软件开发中常用的概念,它们分别用于定义应用程序的接口规范、将URL请求映射到相应的处理程序,并在不同编程范式中定义类的规范。在Web开发中,API和路由密切相关,并可以看作是一种接口来实现客户端与后端的交互。

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

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

相关文章

「网络编程」传输层协议_ TCP协议学习_及原理深入理解(二 - 完结)[万字详解]

「前言」文章内容大致是传输层协议,TCP协议讲解的第二篇,续上篇TCP。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 二、TCP协议2.9 TCP连接管理机制2.9.1 三次握手2.9.2 四次挥手2.9.3 演示查看TIME_WAIT和CLOSE_WAIT状态2.9.…

MySQL 远程操作mysql

可以让别人在他们的电脑上操作我电脑上的数据库 create user admin identified with mysql_native_password by admin; //设置账号密码都为admingrant all on *.* to admin; //给admin账号授权 授权完成

使用elementplus实现文本框的粘贴复制

需求: 文本框仅用于显示展示数据并且用户可以进行复制,并不会进行修改和编辑, 注意点: 1.首先且文本为多行。所以不能使用普通的el-input,这种一行超出就会隐藏了,如果多行超出行数也会隐藏(…

用blender做一层石墨烯

文章目录 1 创建正六边形2 复制正六边形3 阵列4 球棍模型 1 创建正六边形 ShiftA->网格->圆环->左下角出现添加圆环菜单,将顶点设为6,得到一个正六边形。按下tab键进入编辑模式->快捷键F填充,得到下图 2 复制正六边形 首先将轴…

Django的FBV和CBV

Django的FBV和CBV 基于django开发项目时,对于视图可以使用 FBV 和 CBV 两种模式编写。 FBV,function base views,其实就是编写函数来处理业务请求。 from django.contrib import admin from django.urls import path from app01 import view…

Redis主从复制、哨兵机制、集群分片

一.主从复制 1.概述 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave)。 数据的复制是单向的,只能由主节点到从节点默认情况下,每台Redis服务器都是主节…

机器学习深度学习——权重衰减

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——模型选择、欠拟合和过拟合 📚订阅专栏:机器学习&&深度学习 希望文章对你…

Vue2.0基础

1、概述 Vue(读音/vju/,类似于view)是一套用于构建用户界面的渐进式框架,发布于2014年2月。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层(也就是可以理解为HTMLCSSJS)&#xff…

使用Idea提交项目到远程仓库

使用Idea提交项目到远程仓库 1.在Idea中打开本地要推送的项目2.创建远程仓库并提交 1.在Idea中打开本地要推送的项目 tips: 首先你得有git工具,没有的话可以参考下面的这篇文章 git与gitee结合使用,提交代码,文件到远程仓库 从导航栏中选择 V…

uC-OS2 V2.93 STM32L476 移植:系统移植篇

前言 上一篇已经 通过 STM32CubeMX 搭建了 NUCLEO-L476RG STM32L476RG 的 裸机工程,并且下载了 uC-OS2 V2.93 的源码,接下来,开始系统移植 开发环境 win10 64位 Keil uVision5,MDK V5.36 uC-OS2 V2.93 开发板:NUC…

安全狗V3.512048版本绕过

安全狗安装 安全狗详细安装、遇见无此服务器解决、在windows中命令提示符中进入查看指定文件夹手动启动Apache_安全狗只支持 glibc_2.14 但是服务器是2.17_黑色地带(崛起)的博客-CSDN博客 安全狗 safedogwzApacheV3.5.exe 右键电脑右下角安全狗图标-->选择插件-->安装…

untiy代码打压缩包,可设置密码

1、简单介绍: 用的是一个插件SharpZipLib,在vs的Nuget下载,也可以去github下载https://github.com/icsharpcode/SharpZipLib 用这个最主要的是因为,这个不用请求windows的文件读写权限,关于这个权限我搞了好久&#…

【设计模式——学习笔记】23种设计模式——命令模式Command(原理讲解+应用场景介绍+案例介绍+Java代码实现)

案例引入 有一套智能家电,其中有照明灯、风扇、冰箱、洗衣机,这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个手机App来分别控制,希望只要一个app就可以控制全部智能家电要实现一个app控制所有智能家电的需要&…

Jenkins 自动化部署实例讲解,另附安装教程!

【2023】Jenkins入门与安装_jenkins最新版本_丶重明的博客-CSDN博客 也可以结合这个互补看 前言 你平常在做自己的项目时,是否有过部署项目太麻烦的想法?如果你是单体项目,可能没什么感触,但如果你是微服务项目,相…

JVM的组件、自动垃圾回收的工作原理、分代垃圾回收过程、可用的垃圾回收器类型

详细画的图片 https://www.processon.com/diagraming/64c8aa11c07d99075d934311 官方网址 https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html 相关概念 年轻代是所有新对象被分配和老化的地方。当年轻代填满时,这会导致minor …

Rust dyn - 动态分发 trait 对象

dyn - 动态分发 trait 对象 dyn是关键字,用于指示一个类型是动态分发(dynamic dispatch),也就是说,它是通过trait object实现的。这意味着这个类型在编译期间不确定,只有在运行时才能确定。 practice tr…

《Spring Boot源码解读与原理分析》书籍推荐

Spring Boot 1.0.0 早在2014年就已经发布,只不过到了提倡“降本增效”的今天,Spring Boot才引起了越来越多企业的关注。Spring Boot是目前Java EE开发中颇受欢迎的框架之一。依托于底层Spring Framework的基础支撑,以及完善强大的特性设计&am…

设计模式之中介者模式

中介者模式 用一个中介对象来封装一系列的对象交互。中介者使得各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。 电脑主板的功能就类似于一个中介者 经典中介者模式UML 例子 经典的中介者模式 package com.tao.Ya…

Excel快捷键F1-F9详解:掌握实用快捷操作,提升工作效率

Excel是广泛应用于办公场景的优质电子表格软件,然而,许多人只是使用鼠标点击菜单和工具栏来完成操作,而忽略了快捷键的威力。在本文中,我们将详解Excel中的F1-F9快捷键,帮助您掌握实用的快捷操作,提升工作效…