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日

相关文章

  • node.js的http.createServer过程深入解析

    现在我将详细讲解一下“node.js的http.createServer过程深入解析”的完整攻略,希望对您有所帮助。 http.createServer的作用 在深入了解http.createServer的过程之前,我们需要先了解它的作用。http.createServer是node.js中的一个方法,用于创建一个http服务器。我们可以通过该服务器监听客户…

    node js 2023年6月8日
    00
  • node.js实现端口转发

    下面是关于node.js实现端口转发的完整攻略。 什么是端口转发 在计算机网络中,端口是一种特定的标识符,用于标识不同的进程或服务。每个进程或服务都会占用一个特定的端口来进行通信。而端口转发则是将一台计算机的某个端口的流量转发到另一台计算机的某个端口上的技术。 使用node.js实现端口转发的步骤 要使用node.js来实现端口转发,需要进行以下步骤: 1.…

    node js 2023年6月8日
    00
  • node.js使用fs读取文件出错的解决方案

    针对“node.js使用fs读取文件出错的解决方案”的问题,我准备详细讲解以下几个方面:常见错误类型,可能的原因,解决方案及示例说明。 常见的fs读取文件错误类型 在使用fs读取文件时,常见的错误类型包括: ENOENT(Error NO ENTry):文件不存在或路径错误 EACCES(Error ACCESs):无权限访问文件 EMFILE(Error …

    node js 2023年6月8日
    00
  • javascript object oriented 面向对象编程初步

    JavaScript 面向对象编程初步 前言 JavaScript 是一种面向对象的编程语言,面向对象编程(Object Oriented Programming)是一种编程范式,它将数据抽象为对象,对象之间相互关联,通过这种方式组织代码和数据,使得代码更加易读易懂、可维护性更高。 在 JavaScript 中,我们可以使用函数、对象和原型等方式来实现面向对…

    node js 2023年6月8日
    00
  • node.js中的console.log方法使用说明

    下面是关于node.js中的console.log方法使用的详细攻略。 介绍 在node.js中,console是一个全局模块,提供了一系列与控制台交互的API,其中最常用的便是console.log方法。console.log方法可以将输出的信息打印到控制台上,帮助我们进行控制台调试、日志输出等操作。 使用方法 console.log的使用方法非常简单,只…

    node js 2023年6月8日
    00
  • node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)

    下面我将为大家讲解“node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)”的完整攻略。 什么是node.js基于cheerio的爬虫工具? Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,可以在服务器端运行 JavaScript 代码。Cheerio 是 Node.js 中一个非常流行的小型解…

    node js 2023年6月9日
    00
  • node.js中的buffer.Buffer.isBuffer方法使用说明

    下面来详细讲解“node.js中的buffer.Buffer.isBuffer方法使用说明”的完整攻略。 什么是Buffer Buffer是Node.js中的一个全局构造函数,它提供了对二进制数据的操作。Buffer的实例类似于整数数组,但Buffer的大小是固定的,它无法对其大小进行更改。 Buffer.isBuffer方法 Buffer.isBuffer…

    node js 2023年6月8日
    00
  • 利用Node.js创建一个密码生成器的全步骤

    创建一个密码生成器的全步骤可以拆分为以下五个步骤: 1. 安装Node.js 要使用Node.js创建密码生成器,首先需要在本地计算机上安装Node.js。Node.js可以在官网上下载:https://nodejs.org/en/。 2. 创建一个空项目并初始化npm 打开命令行或终端,创建一个空项目并进入该项目目录。在项目目录下使用以下命令初始化npm:…

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