Nodejs编写接口

news2025/8/12 10:15:31

编写接口

1.自定义路由模块

const express=require('express')
const router=express.Router()

// 挂载对应的路由
router.get('/get',(req,res)=>{
    // 通过req.query获取客户端通过查询字符串,发送到服务器的数据
    const query=req.query
    // 调用res.send()方法,向客户端响应处理的结果
    res.send({
        status:0,    // 0表示处理成功,1表示处理失败
        msg:'GET 请求成功',    //状态的描述
        data:query // 需要响应给客户端的数据 
    })
})

// 定义post接口
router.post('/post',(req,res)=>{
    //通过req.body获取请求体中包含的url-encoded格式的数据
    const body=req.body
    //调用res.send()向客户端响应结果
    res.send({
        status:0,
        msg:'post 请求成功',   
        data:body
    })
})

module.exports=router

2.将路由注册到服务器实例上

1.并且引入cors中间件注册到服务器实例上,解决跨域问题
2.将自定义路由模块挂载到服务器上,/api请求
3.express.urlencoded({extends:false} 解析表单中间件

// 导入express
const express=require('express')
// 创建服务实例
const app=express()

// 配置解析表单数据的中间件
app.use(express.urlencoded({extends:false}))

// 一定要在路由之前,配置cors这个中间件,从而解决接口跨域问题
const cors=require('cors')
app.use(cors)

// 导入路由模块
const router=require('./02_apiRouter')
// 把路由模块,注册到app上
app.use('/api',router)

// 启动服务器
app.listen(8080,()=>{
    console.log('Express server running st http://127.0.0.1:8080');
})

测试接口跨域问题

在导入路由模块前,将cors中间件注册到服务器实例上

// 导入express
const express=require('express')
// 创建服务实例
const app=express()

// 配置解析表单数据的中间件
app.use(express.urlencoded({extends:false}))

// 一定要在路由之前,配置cors这个中间件,从而解决接口跨域问题
const cors=require('cors')
app.use(cors)

// 导入路由模块
const router=require('./02_apiRouter')
// 把路由模块,注册到app上
app.use('/api',router)

// 启动服务器
app.listen(8080,()=>{
    console.log('Express server running st http://127.0.0.1:8080');
})

cors介绍:

在这里插入图片描述
在这里插入图片描述

使用express写接口

CORS响应头

1.Access-Control-Allow-Origin

允许那些网站能够请求
在这里插入图片描述

2.限制客户端发送过来的请求头:Access-Control-Allow-Headers
客户端发送请求过来,不能发送额外的请求头信息,因为CORS设定好了,除非在服务端对 Access-Control-Allow-Headers 进行声明
在这里插入图片描述
3.限制请求方式:Access-Control-Allow-Methods

在这里插入图片描述
4.简单请求
在这里插入图片描述
5.预检请求
就是对CORS默认的放行资源之外的请求就叫预检请求
在这里插入图片描述在这里插图片预检请求描述

简单请求和预检请求的区别

在这里插入图片描述

JSONNP接口

1.概念:

JSONP是一个跨域解决方案,目的是跨域请求JSON数据,因为JSON数据是不能跨域请求的,但是我们js跨域请求js脚本是可以的,可以把数据封装成一个js语句,做一个方法的调用。跨域请求js脚本即可获取数据

    1. 标签script的src属性是可以跨域的,所以我们跨域的服务器只要写成调用本地的函数,回调数据就可以实现跨域了
    1. 过我们发现,web页面调用js文件则不受跨域的影响(不仅如此,我们还发现凡是拥有“src”这个属性的标签都拥有跨域的能力,比如<\script>、<\img>、<\iframe>)
    1. 恰巧我们知道有一种叫做JSON的纯字符数据格式可以简洁的描述复杂数据,更妙的是JSON还被js原生支持,所以在客户端几乎可以随心所欲的处理这种格式的数据。
      在这里插入图片描述

在这里插入图片描述
注意事项:
在这里插入图片描述
2.实践,实现JSONP接口的步骤:

在这里插入图片描述
在这里插入图片描述
代码:

// 导入express
const express=require('express')
// 创建服务实例
const app=express()

// 配置解析表单数据的中间件
app.use(express.urlencoded({extends:false}))


// 配置json接口(必须在配置cors中间件前配置jsonp接口)
app.get('/api/jsonp',(req,res)=>{
//   1.得到回调函数的名称
const funcName=req.query.callback 
    
//   2.定义要发送到客户端的数据对象(回调的数据)
const data={ name: 'zs', age: 22 }
//   3.拼接出函数调用的字符串(请求的名称+数据)
const scriptStr = `${funcName}(${JSON.stringify(data)})`
//   4.把拼接的字符串响应给客户端
 res.send(scriptStr)
})

// 一定要在路由之前,配置cors这个中间件,从而解决接口跨域问题
const cors=require('cors')
app.use(cors)

// 导入路由模块
const router=require('./02_apiRouter')
// 把路由模块,注册到app上
app.use('/api',router)

// 启动服务器
app.listen(8080,()=>{
    console.log('Express server running st http://127.0.0.1:8080');
})

网页:

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js"></script>

</head>
<body>
    <button id="btnget">get</button>
    <button id="btnpost">post</button>
    <button id="btndelete">delete</button>
    <button id="btnJSONP">jsonp</button>
    <script>
        $(function(){
            // 1.测试get接口
            $('#btnget').on('click',function(){
                $.ajax({
                    type:'GET',
                    uel:'http://127.0.0.1/api/get',
                    data:{name:'cc',age:18},
                    success:function(res){
                        console.log(res);
                    }
                })
            })

            // 2.测试delete接口
            $('#btndelete').on('click',function(){
                $.ajax({
                    type:'DELETE',
                    uel:'http://127.0.0.1/api/delete',
                    data:{name:'cc',age:18},
                    success:function(res){
                        console.log(res);
                    }
                })
            })

            $('#btnJSONP').on('click',function(){
                $.ajax({
                  type: 'GET',
                  url: 'http://127.0.0.1/api/jsonp',
                  dataType: 'jsonp',
                  success: function(res){
                    console.log(res)
                  },
                })
            })

            // 2.测试post接口
            // $('#btnpost').on('click',function(){
            //     $.ajax({
            //         type:'POST',
            //         uel:'http://127.0.0.1/api/post',
            //         data:{bookname:'水浒传',author:'施耐庵'},
            //         success:function(res){
            //             console.log(res);
            //         }
            //     })
            // })
        })
    </script>
</body>
</html>

测试发现得到回调后服务端所发来的数据
在这里插入图片描述

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

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

相关文章

集成学习-Bagging和Boosting算法

文章目录集成学习Bagging随机森林BostingAdaboostGBDTXGBoost集成学习 集成学习&#xff08;ensemble learning&#xff09;博采众家之长&#xff0c;通过构建并结合多个学习器来完成学习任务。“三个臭皮匠顶个诸葛亮”&#xff0c;一个学习器&#xff08;分类器、回归器&…

【微服务】SpringCloud微服务续约源码解析

目录 一、前言 二、客户端续约 1、入口 1.1、构造初始化 1.2、initScheduledTasks() 调度执行心跳任务 2、TimedSupervisorTask组件 2.1、构造初始化 2.2、TimedSupervisorTask#run()任务逻辑 3、心跳任务 3.1、HeartbeatThread私有内部类 3.2、发送心跳 3、发送心…

使用OpenAPI提升网关安全的开源软件,诚邀小伙伴参与

看过我博客的人都知道&#xff0c;我们是一家推广OpenAPI的企业。 OpenAPI是一种用于定义API结构的规范&#xff0c;在Java里我们可以使用swagger进行自动生成。其他语言也可以&#xff08;Golang等&#xff09;。通过这种对开发人员零成本的工具&#xff0c;我们可以高效的获…

典型的偏微分方程数值解法

马上要参加亚太杯啦&#xff0c;听说今年亚太杯有经典的物理题&#xff0c;没什么好说的&#xff0c;盘它&#xff01; 偏微分方程的数值解十分重要 椭圆型偏微分方程&#xff08;不含时&#xff09; 数值解法 二维拉普拉斯方程 例 边界条件 import numpy as np import mat…

教你如何使用云服务器搭建我的世界Minecraft服务器(超级简单-10分钟完成)

一个人玩游戏没啥意思&#xff0c;和朋友一块联机呢&#xff0c;距离太远&#xff0c;家庭局域网宽带又没有公网ip&#xff0c;你的朋友没办法与你联机&#xff0c;然而你只需要一台服务器即可搞定了&#xff1b;但是很多用户没没接触过相关的内容&#xff0c;具体的该怎么操作…

怎样做音乐相册怎样制作?手把手教你制作

大家平时出门游玩的时候&#xff0c;会拍摄一些好看的照片吗&#xff1f;那你们会将这些照片分享在社交平台上吗&#xff1f;普通的照片分享&#xff0c;有时会显得比较枯燥单调&#xff0c;其实我们可以将这些照片制作成音乐相册&#xff0c;这样就可以丰富照片的内容&#xf…

传输层-用户数据报协议(UDP)

UDP协议概述 用户数据报协议 UDP 是 Internet 传输层协议&#xff0c;提供无连接、不可靠、数据报尽力传输服务。 无连接&#xff1a;因此在支持两个进程间通信时&#xff0c;没有握手过程。不可靠&#xff1a;当应用进程将一个报文发送近 UDP 套接字时&#xff0c;UDP 并不能…

python+vue+elementui固定资产管理系统django mysql

目 录 摘 要 I ABSTRACT I 目 录 III 第1章 绪论 1 1.1开发背景 1 1.2开发意义 1 1.3研究内容 1 第2章 主要技术和工具介绍 3 前端技术&#xff1a;nodejsvueelementui 我们最初的项目结构由五个文件组成&#xff1a; manage.py&#xff1a;使用…

为什么管理类硕士(MBA/MEM/MPA)报考会成为职场人的香饽饽?

没个硕士学位&#xff0c;将来出门可能真的都不好意思打招呼了。近些天传言2023年考研人数达到接近550万的信息满天飞&#xff0c;无论真假&#xff0c;从目前已公布报考人数的院校来看&#xff0c;在去年的457万基础上再涨一波的几率是很大的。这其中&#xff0c;报考管理类、…

电科大离散数学-2-命题逻辑-1

目录 2.1 什么是命题 2.1.1 命题的定义 2.1.2 复合命题 2.2 命题联结词 2.2.1 否定联结词 2.2.2 合取联结词 2.2.3 析取联结词 2.2.4 蕴涵联结词 2.2.5 等价联结词 2.3 命题符号化及应用 2.3.1 命题连接词总结 2.3.2 命题联结词的优先级 2.3.3 命题联接词与开关电…

scala

Scala 概述 Scala是一门以Java虚拟机&#xff08;JVM&#xff09;为运行环境并将面向对象和函数式编程的最佳特性结合在一起的 静态类型编程语言&#xff08;静态语言需要提前编译的如&#xff1a;Java、c、c等&#xff0c;动态语言如&#xff1a;js&#xff09;。 Scala是一…

4-20mA转RS-485,Modbus数据采集模块 YL121

特点&#xff1a; ● 模拟信号采集&#xff0c;隔离转换 RS-485输出 ● 采用12位AD转换器&#xff0c;测量精度优于0.1% ● 通过RS-485接口可以程控校准模块精度 ● 信号输入 / 输出之间隔离耐压1000VDC ● 宽电源供电范围&#xff1a;8 ~ 32VDC ● 可靠性高&#xff0c;…

equals与==判断相等

一、 判断相等&#xff0c;判断的是物理地址相等。 二、equals 判断相等 equals 与hashCode 都是Object的方法。 所有的类都继承于Object&#xff0c;如果不重写equals。equals判断相等&#xff0c;底层也是使用来判断物理地址相等。 public boolean equals(Object obj) {re…

影响MySQL索引B+树高度的是什么?

提到MySQL&#xff0c;想必大多后端同学都不会陌生&#xff0c;提到B树&#xff0c;想必还是有很大部分都知道InnoDB引擎的索引实现&#xff0c;利用了B树的数据结构。 那InnoDB 的一棵B树可以存放多少行数据&#xff1f;它又有多高呢&#xff1f; 到底是哪些因素会对此造成影…

【软件测试】测试人的职责,我就是不当背锅侠......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 测试的目的&#xf…

基于机器视觉的移动消防机器人(四)--实验验证

本文素材来源于北方民族大学 机电工程学院 作者&#xff1a;牟义达、黄瑞翔、李涛 指导老师&#xff1a;田国禾、张春涛 1. 自主行走功能验证 实验目的&#xff1a;让机器人小车行驶500ms后停500ms&#xff0c;循环重复。 实验器材&#xff1a;计算机、消防机器人小车。 实…

ACM MM ECCV 2022 | 美团视觉8篇论文揭秘内容领域的智能科技

人工智能技术正在成为内容领域的中台力量&#xff0c;其中视觉AI已经渗透到内容生产、内容审核、内容分发、用户互动、商业化变现等各个环节。美团视觉智能部以场景化的内容产品、智能化的内容工具助力产业&#xff0c;在内容的创作、内容分发等环节应用广泛。 前不久&#xff…

开源项目让你也可以尝试玩转工业物联网以及智慧工厂(智能制造),IOT开源网关、SCADA取数开源、PLC数据采集

物联网进入与传统产业深度融合发展的崭新阶段。未来10年内&#xff0c;全球物联网将创造10多万亿美元的价值&#xff0c;约占全球经济的1/10&#xff0c;并与城市管理、生产制造、汽车驾驶、能源环保等形成数个千亿级规模以上的细分市场。 随着物联网技术的快速发展&#xff0c…

win10怎么录屏?windows自带录屏功能怎么用

​相信很多小伙伴家里的电脑都是win10系统的&#xff0c;想要录制电脑上的画面&#xff0c;那么就需要用到了windows自带的录屏功能。win10怎么录屏&#xff1f;windows自带的录屏功能怎么用&#xff1f;别担心&#xff0c;今天小编就来教教大家如何在win10系统上录制电脑屏幕。…

Python程序员:代码写的好,丝滑的壁纸少不了

人生苦短&#xff0c;我用Python序言python批量下载最后序言 不知道大家的电脑桌面一般用的什么类型的壁纸&#xff1f; 早上来上班&#xff0c;打开电脑&#xff0c;被漂亮的桌面壁纸所吸引&#xff0c;年底将近&#xff0c;这又是哪个地方的节日&#xff1f; 才晓得&#x…