Node.js返回JSONP详解

yizhihongxing

一、什么是JSONP?

JSONP是一种跨域访问数据的方式,它通过动态生成script标签,将请求发送到跨域地址上,跨域地址返回一段特定格式的JavaScript代码,调用一个回调函数,将数据作为参数传递给该函数。由于script标签不受同源策略的限制,因此可以轻松实现跨域请求数据的功能。

二、JSONP的实现原理

创建script标签,将请求发送至跨域地址

返回一段调用回调函数的JavaScript代码,数据做为参数

三、Node.js如何实现JSONP请求

  1. 安装express模块
npm install express --save
  1. 创建Node.js服务器
const express = require('express')
const app = express()
const port = 3000

app.get('/jsonp', (req, res) => {
  const data = {
      name: 'jack',
      age: 18
  }
  const callback = req.query.callback; //接收回调函数名

  const jsonpStr = `${callback}(${JSON.stringify(data)})`//拼接jsonp字符串

  res.send(jsonpStr);
})

app.listen(port, () => {
  console.log(`The server is running on http://localhost:${port}`)
})
  1. 发送JSONP请求
<script>
    function myCallback(data){
        alert(data.name + '-' + data.age);
    }

    const script = document.createElement('script');
    script.type ='text/javascript';
    script.src = 'http://localhost:3000/jsonp?callback=myCallback';
    document.body.appendChild(script);
</script>

四、示例说明

  1. 简单的jsonp示例

接收端服务地址:

app.get('/jsonp', (req, res) => {
  const data = {
      name: 'jack',
      age: 18
  }
  const callback = req.query.callback; //接收回调函数名

  const jsonpStr = `${callback}(${JSON.stringify(data)})`//拼接jsonp字符串

  res.send(jsonpStr);
})

客户端请求:

<script>
    function myCallback(data){
        alert(data.name + '-' + data.age);
    }

    const script = document.createElement('script');
    script.type ='text/javascript';
    script.src = 'http://localhost:3000/jsonp?callback=myCallback';
    document.body.appendChild(script);
</script>
  1. 利用jsonp获取其他域名下的数据

接收端服务地址:

app.get('/jsonp', (req, res) => {
  const url=`http://gank.io/api/today`; //获取gank.io今日推荐的api
  const callback = req.query.callback; //接收回调函数名
  const jsonpStr = `${callback}(${JSON.stringify(data)})`//拼接jsonp字符串

  http.get(url,(sres)=>{
      let rawData = '';

      sres.on('data', (chunk) => {
        rawData += chunk;
      });
      sres.on('end', () => {
        const data = JSON.parse(rawData);
        res.send(jsonpStr); // 发送jsonp数据
      });
  });
})

客户端请求:

 <script>
    function myCallback(data){
        console.log(data);
    }

    const script = document.createElement('script');
    script.type ='text/javascript';
    script.src = 'http://localhost:3000/jsonp?callback=myCallback';
    document.body.appendChild(script);
</script>

以上示例展示了如何利用JSONP在跨域的情况下获取数据。通过以上步骤,您应该可以自己实现JSONP,这是Web前端工程师不可缺少的技能之一。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.js返回JSONP详解 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • Nodejs中的JWT和Session的使用

    首先我们需要明确JWT和Session的概念。JWT(JSON Web Token)是一种用于身份验证的标准,它可以在用户和服务器之间传递信息并进行验证。Session则是一种服务器端的会话技术,用于记录用户的登录状态。 Node.js是一个非常适合处理用户请求和后端逻辑的语言,因此我们可以使用Node.js来实现JWT和Session的使用。 以下是Nod…

    node js 2023年6月8日
    00
  • node-red File读取好保存实例讲解

    下面是node-red对于文件读取和保存的完整攻略: 1. 首先安装node-red的fs模块 在使用node-red读取和保存文件之前,需要先安装node-red的fs模块。打开终端窗口,进入到node-red的安装目录下,然后输入以下命令进行fs模块的安装: npm install fs –save 2. 读取文件 在node-red中,使用fs模块的…

    node js 2023年6月8日
    00
  • 详解Nodejs的timers模块

    关于Nodejs的timers模块,它为JavaScript提供计时器相关的API,包括定时器、清除定时器等。下面详细讲解一下。 定时器API 1. setTimeout() setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。 setTimeout(() => { console.log(‘2 seconds have passe…

    node js 2023年6月8日
    00
  • node后端与Vue前端跨域处理方法详解

    一、 前言 在前后端分离的开发模式中,前端Vue与后端Node进行沟通交互涉及到跨域问题。下面我们来详细讲解node后端与Vue前端跨域处理方法。 二、 跨域原理 同源策略(Same Origin Policy)要求网页只能访问与本网页同一个域名、端口、协议的网页。也就是说,一个源的的脚本仅能读写属于该源的窗口和文档。如果读写的目标不是同源的,就会出现跨域问…

    node js 2023年6月8日
    00
  • 详解用node搭建简单的静态资源管理器

    详解用node搭建简单的静态资源管理器 什么是静态资源管理器 静态资源管理器是一种用于管理前端静态资源(如html、css、js、图片等)的工具,可以通过该工具实现静态资源的访问、上传、删除、编辑等操作。 搭建静态资源管理器的前置条件 安装node.js及npm 掌握node.js基本语法 掌握npm依赖包管理 步骤一:创建工程目录 mkdir static…

    node js 2023年6月8日
    00
  • NodeJS收发GET和POST请求的示例代码

    下面就是关于“NodeJS收发GET和POST请求的示例代码”的详细攻略: 1. NodeJS 监听 HTTP 请求 在 NodeJS 中,可以通过 http 模块来做 web 服务器,这样就可以监听 HTTP 请求并进行相应的处理,从而实现接收和发送请求的功能,代码如下所示: const http = require(‘http’); const serv…

    node js 2023年6月8日
    00
  • Vue3+Element-plus项目自动导入报错的解决方案

    下面我就为您详细讲解“Vue3+Element-plus项目自动导入报错的解决方案”的完整攻略。 问题描述 在使用Vue3+Element-plus项目进行开发时,如果使用自动导入方式(通过Babel插件或Webpack插件)进行引入组件,则可能会出现报错(如“Cannot read properties of undefined (reading ‘pro…

    node js 2023年6月8日
    00
  • 详解前端自动化工具gulp自动添加版本号

    下面我将为你详细讲解如何使用gulp自动添加版本号来优化前端开发流程。 什么是gulp Gulp是一款基于Node.js的前端自动化构建工具,可以帮助开发者通过编写简单的任务脚本来自动化构建和打包前端代码。 为什么需要自动添加版本号 在前端开发中,经常需要通过添加版本号来强制刷新浏览器缓存,以确保更新后的代码能够立即生效。手动添加版本号费时费力,容易出错,因…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部