【node.js从入门到精通】编写接口,使用CROS解决跨域问题,jsonp的接口

简介: 【node.js从入门到精通】编写接口,使用CROS解决跨域问题,jsonp的接口

前言


接口是前后端的一座桥梁。接口是后端设计的一套供给第三方使用的方法。(第三方指前端/后端)接口通过网络协议来调用,最常用的协议是HTTP协议。在定义一个接口时,会写好接口路径和接口方法名的映射,然后前端通过接口路径来调用方法,接下来就看看什么是接口。


1. get接口


●模块的封装,将封装好的模块通过module.exports进行向外暴露,是其他的可以使用该路由模块

const express = require('express');
const router = express.Router();
// 挂载对应路由模块
router.get('/get', (req, res) => {
    const query = req.query;
    // 调用send方法向客户端响应处理结果
    res.send({
        status: 0, //0=成功,1=失败
        masg: 'Get请求成功', // 状态描述
        data: query // 响应给客户端
    })
})
module.exports = router;

●将封装好的模块进行导入

const express = require('express')
const app = express()
// 导入路由模块
const router = require('./02.apiRouter')
// 挂载路由模块到app上面
app.use('/api', router);
app.listen(80, () => {
    console.log('express server running at http://127.0.0.1');
})

测试get接口


$('#btnGET').on('click', function () {
                // 测试GET接口
                $.ajax({
                    type: 'GET',
                    url: 'http://127.0.0.2/api/get',
                    data: { name: 'ss', age: 12 },
                    success: function (res) {
                        console.log(res);
                    },
                })
            })



2.post接口  


router.post('/post', (req, res) => {
    const body = req.body
    // 调用send方法向客户端响应处理结果
    res.send({
        status: 0,
        msg: 'POST请求成功!',
        data: 'body'
    })
})

测试post接口

$('#btnPOST').on('click', function () {
                // 测试POST接口
                $.ajax({
                    type: 'POST',
                    url: 'http://127.0.0.2/api/get',
                    data: { name: 'ss', age: 12 },
                    success: function (res) {
                        console.log(res);
                    },
                })
            })


不要忘记配置一下这个中间件在另一个文件里



3.跨域问题


GET和POST接口,存在一个很严重的问题:不支持跨域请求。


解决接口跨域问题的方案主要有两种:①CORS (推荐使用,都支持) ②JSONP (有缺陷,只支持GET请求)


1.CROS是什么

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


2.使用CROS解决跨域问题

第一步:npm i cors 安装cors中间件


第二步:const cors require('cors') 导入中间件


第三步:调用app.use(cors()) 配置中间件(在路由之前调用)



3.CORS请求的分类

客户端在请求CORS接口时,根据请求方式和请求头的不同,可以将CORS的请求分为两大类


①简单请求 ②预检请求


简单请求:


①请求方式: GET. POST、 HEAD三者之一 ②HTTP 头部信息不超过以下几种字段:无自定义头部字段、Accept. Accept-Language、 Content-Language、 DPR、 Downlink、Save-Data、 Viewport-Width、 Width 、Content-Type (只有三个值application/x-www-form- urlencoded、multipart/form-data、 text/plain)


预检请求:


①请求方式为 GET、POST、HEAD 之外的请求Method类型 ②请求头中包含自定义头部字段 ③向服务器发送 了application/jison 格式的数据


特点:


简单请求的特点:客户端与服务器之间只会发生一次请求。 预检请求的特点:客户端与服务器之间会发生两次请求,OPTION预检请求成功之后,才会发起真正的请求。


4.编写jsonp的接口

如果已经配置了CORS跨域资源共享,为了防止冲突,必须在配置CORS中间件之前声明JSONP的接口。否则JSONP接口会被处理成开启了CORS的接口。


配置jsonp接口,由于jsonp没有在router中所以得加上‘/api’

// jsonp接口必须配置到cors之前
app.get('/api/jsonp', (req, res) => {
    // 定义jsonp接口
    // 获得函数名
    const funcName = req.query.callback;
    // 定义要发送到客户端的数据对象
    const data = { name: 'qw', age: 12 }
    // 拼接一个函数调用
    const scriptStr = `${funcName}(${JSON.stringify(data)})`
    // 把所拼接的字符串响应给客户端
    res.send(scriptStr)
})

2.绑定事件按钮

// 为jsonp事件绑定按钮
            $(`#btnJSONP`).on('click', function () {
                $.ajax({
                    type: 'GET',
                    url: 'http://127.0.0.1',
                    dataType: 'jsopn',
                    success: function (res) {
                        console.log(res);
                    }
                })
            })

🐸本章小结:这一路走来困难也有喜悦也有,也曾为了代码熬到一两点钟,也曾有过离家出走的头发,但是这些都将成为我的无形筹码。正如我见青山多妩媚,料青山见我应如是,努力向前,付出不会辜负每一个人的,幸运女神也会眷顾你的!继续加油继续淦!

目录
相关文章
|
2月前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
556 2
|
25天前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
1月前
|
JSON JavaScript 前端开发
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
本文介绍了JSONP的工作原理及其在解决跨域请求中的应用。首先解释了同源策略的概念,然后通过多个示例详细阐述了JSONP如何通过动态解释服务端返回的JavaScript脚本来实现跨域数据交互。文章还探讨了使用jQuery的`$.ajax`方法封装JSONP请求的方式,并提供了具体的代码示例。最后,通过一个更复杂的示例展示了如何处理JSON格式的响应数据。
36 2
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
|
1月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
111 1
|
1月前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
40 0
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
|
1月前
|
JSON JavaScript 前端开发
js跨域实现
【10月更文挑战第31天】在实际开发中,需要根据具体的需求和项目情况选择合适的跨域解决方案。
27 1
|
1月前
|
监控 前端开发 JavaScript
React 静态网站生成工具 Next.js 入门指南
【10月更文挑战第20天】Next.js 是一个基于 React 的服务器端渲染框架,由 Vercel 开发。本文从基础概念出发,逐步探讨 Next.js 的常见问题、易错点及解决方法,并通过具体代码示例进行说明,帮助开发者快速构建高性能的 Web 应用。
87 10
|
1月前
|
数据采集 存储 JavaScript
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
本文介绍了如何使用Puppeteer和Node.js爬取大学招生数据,并通过代理IP提升爬取的稳定性和效率。Puppeteer作为一个强大的Node.js库,能够模拟真实浏览器访问,支持JavaScript渲染,适合复杂的爬取任务。文章详细讲解了安装Puppeteer、配置代理IP、实现爬虫代码的步骤,并提供了代码示例。此外,还给出了注意事项和优化建议,帮助读者高效地抓取和分析招生数据。
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
|
3月前
|
JavaScript 前端开发 小程序
一小时入门Vue.js前端开发
本文是作者关于Vue.js前端开发的快速入门教程,包括结果展示、参考链接、注意事项以及常见问题的解决方法。文章提供了Vue.js的基础使用介绍,如何安装和使用cnpm,以及如何解决命令行中遇到的一些常见问题。
一小时入门Vue.js前端开发
|
2月前
|
JSON 前端开发 API
使用微信JS-SDK调用发票接口的完整开发指南
本文介绍了如何使用微信JS-SDK的`chooseInvoiceTitle`接口来调用微信的发票功能。通过微信发票接口,用户可以选择开具个人或单位发票,并获取相关发票信息,如抬头、税号、公司地址等。在文中,详细描述了JS-SDK的初始化、发票接口的调用方式,并提供了完整的代码示例。文章还介绍了如何处理返回的发票信息,帮助开发者快速集成微信发票功能。
93 2