Node.js返回JSONP详解

一、什么是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日

相关文章

  • Vue.js中v-show和v-if指令的用法介绍

    当我们使用Vue.js开发项目的时候,经常会用到v-show和v-if这两个指令。这两个指令都是用于控制Vue.js模板中元素的显示和隐藏。但是,这两个指令的使用场景并不完全相同。接下来我们将详细介绍v-show和v-if指令的用法。 v-show指令的用法 v-show指令用于控制Vue.js模板中元素的显示和隐藏,与普通的CSS属性display:non…

    node js 2023年6月9日
    00
  • 一文带你搞懂Node中的流

    一文带你搞懂Node中的流 什么是流 在Node.js中,流(Stream)是一种处理数据的抽象接口,是在处理大量数据时一种更加高效、可读性更强的解决方案。 流的本质就是ReadStream和WriteStream,它可以分为读流和写流。 Readable 读流也就是Readable,它是一个抽象类,不能用它自己,需要继承它后才能用。Readable提供了一…

    node js 2023年6月8日
    00
  • nodejs微信扫码支付功能实现

    针对”nodejs微信扫码支付功能实现”,以下是一个完整攻略: 一、准备工作 创建微信开发者账号,获取AppID和AppSecret,并申请商户号和API密钥。 安装Node.js,配置npm。 在本地创建node.js项目,使用npm初始化项目,并安装需要的模块。 下载微信支付的开发工具包。 二、请求access_token和openid 在Node.js…

    node js 2023年6月8日
    00
  • node工作线程worker_threads的基本使用

    下面我将详细讲解“node工作线程worker_threads的基本使用”的完整攻略。 基本介绍 Node.js是一款基于V8引擎的JavaScript环境,因其高效、轻量、可扩展性强等特点,近年来备受各大企业的青睐。Node.js使用多个事件循环线程来处理并发请求,但在单个线程下,通过worker_threads模块可以实现多线程操作,提高代码执行效率。w…

    node js 2023年6月8日
    00
  • 简单好用的nodejs 爬虫框架分享

    简单好用的 Node.js 爬虫框架分享 什么是爬虫框架 爬虫框架是一种编程工具,用于提取互联网上的信息。它是由数据抓取器、页面解析器、数据存储器等模块组成。一般情况下,它们帮助我们抓取一些网站的数据,分析并将它们存储到我们需要的地方。使用爬虫可以让我们快速地获取大量数据并进行分析。 Node.js 爬虫框架 Node.js爬虫框架是一个美妙的选择,因为它是…

    node js 2023年6月8日
    00
  • node.js中的定时器nextTick()和setImmediate()区别分析

    关于”node.js中的定时器nextTick()和setImmediate()区别分析”这一问题,下面我将详细讲解其完整攻略。 一、定时器概念 在Node.js中,我们经常需要使用事件循环机制,通过设置定时器,控制和执行某些代码或函数。Node.js中提供了五个定时器。 setTimeout:在指定时间后调用指定函数。 setInterval:每隔指定时间…

    node js 2023年6月8日
    00
  • vue打包报错:ERROR in static/js/xxx.js from UglifyJs undefined问题

    下面是关于“vue打包报错:ERROR in static/js/xxx.js from UglifyJs undefined问题”的完整攻略: 问题分析 问题出现在打包的过程中,UglifyJs在处理某些文件时出现了错误,导致打包产生了错误。具体错误信息是 ERROR in static/js/xxx.js from UglifyJs undefined。…

    node js 2023年6月8日
    00
  • 基于JavaScript实现树形下拉框

    下面就是基于JavaScript实现树形下拉框的完整攻略。 1.什么是树形下拉框 树形下拉框是一个多级菜单,其中每一个下拉选项都可以展开下级选项,类似于目录结构。它可以有效地帮助用户快速准确地选择他们需要的选项。 2.实现树形下拉框的方法 实现树形下拉框的方法可以进行如下步骤: 2.1 准备数据 首先需要准备好树形结构的数据,数据的格式通常是嵌套数组或嵌套对…

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