欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node.js使用JSONP接口的具體用法

 更新時(shí)間:2024年03月11日 15:15:12   作者:愛健身的小劉同學(xué)  
JSONP是一個(gè)跨域解決方案,本文主要介紹了Node.js使用JSONP接口的具體用法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1. 概念及特點(diǎn)

概念:瀏覽器通過 <script> 標(biāo)簽的 src 屬性,請(qǐng)求服務(wù)器上的數(shù)據(jù),同時(shí)服務(wù)器返回一個(gè)函數(shù)的調(diào)用。這種請(qǐng)求數(shù)據(jù)的方式叫做 JSONP

特點(diǎn):  ①   JSONP 不屬于真正的 Ajax 請(qǐng)求,因?yàn)樗鼪]有使用 XMLHttpRequest 這個(gè)對(duì)象

②   JSONP 僅支持 GET 請(qǐng)求,不支持 POST、PUT、DELETE 等請(qǐng)求

2. 創(chuàng)建 JSONP 接口的注意事項(xiàng)

如果項(xiàng)目中已經(jīng)配置了 CORS 跨域資源共享,為了防止沖突,必須在配置 CORS 中間件之前聲明 JSONP 的接口。否者 JSONP 接口會(huì)被處理成開啟了 CORS 的接口

// 優(yōu)先創(chuàng)建 JSONP 接口    [這個(gè)接口不會(huì)被處理成 CORS 接口]
app.get('/api/jsonp', (req, res) =&gt; { })

// 配置 CORS 中間件 [后續(xù)的所有接口都會(huì)被處理成 CORS 接口]
app.use(cors())

// 這是一個(gè)開啟了 CORS 的接口
app.get('/api/get', (req, res) =&gt; { })

3. 實(shí)現(xiàn) JSONP 接口的步驟

①   獲取客戶端發(fā)送過來的回調(diào)函數(shù)的名字

②   得到要通過 JSONP 形式發(fā)送給客戶端的數(shù)據(jù)

③   根據(jù)前兩步得到的數(shù)據(jù),拼接出一個(gè)函數(shù)調(diào)用的字符串

④   把上一步拼接得到的字符串,響應(yīng)給客戶端的 <script> 標(biāo)簽進(jìn)行解析執(zhí)行

4. 實(shí)現(xiàn) JSONP 接口的具體代碼

app.get('/api/jsonp', (req, res) => {
    // 1. 
    const funName = req.query.callback
    // 2. 
    const data = { name: 'zj', age: '22' }
    // 3. 
    const scriptStr = `${funName}(${JSON.stringify(data)})`
    // 4. 
    res.send(scriptStr)
})

5. 在網(wǎng)頁中使用 JQuery 發(fā)起 JSONP 請(qǐng)求

調(diào)用 $.ajax()函數(shù),提供 JSONP 的配置選項(xiàng),從而發(fā)起 JSONP 請(qǐng)求

$('#btnJSONP').on('click', () => {
    $.ajax({
        method: 'GET',
        url: 'http://127.0.0.1/api/jsonp',
        dataType: 'jsonp', // 表示要發(fā)起的是 JSONP 請(qǐng)求
        success: (res) => {
            console.log(res)
        }
    })
})

使用JSONP格式實(shí)現(xiàn)跨域

實(shí)現(xiàn)步驟

  •  動(dòng)態(tài)創(chuàng)建一個(gè)script標(biāo)簽
  •  src指向接口的地址
  •  定義一個(gè)函數(shù)和后端調(diào)用的函數(shù)名一樣

實(shí)現(xiàn)代碼 -- 在nodejs中使用http內(nèi)置模塊起一個(gè)服務(wù),端口號(hào)為3000

const url = require('url')

const http = require('http')

const server = http.createServer((req,res)=>{
    if(req.url === '/favicon.ico') return  //圖標(biāo)忽略 --- 圖標(biāo)地址也會(huì)請(qǐng)求后臺(tái)服務(wù)
    const {query,pathname} = url.parse(req.url,true)  //若加上true這個(gè)參數(shù),query字符串參數(shù)會(huì)自動(dòng)轉(zhuǎn)成對(duì)象格式

    //設(shè)置頭部信息 狀態(tài)為200 內(nèi)容為JSON格式  如果要返回html片段這設(shè)置為text/html
    res.writeHead(200, { 'Content-Type': 'application/json' });

    if(pathname == '/api/data'){
        //定義對(duì)象,返回給前端的   數(shù)據(jù)
        const obj = {code:200,message:'jsonp形式返回給前端'}
        //返回一個(gè)JSON調(diào)用的函數(shù)
        res.end(`toFront(${JSON.stringify(obj)})`)
    }else{
        //簡單處理了
        res.writeHead(404, { 'Content-Type': 'application/json' });
        res.end('404')

    }

   //jsonp跨域操作
   //  console.log(req.url) //獲取請(qǐng)求除域名外的地址 例如 localhost:300/api  只獲取/api
})
server.listen(3000,()=>{
    console.log("服務(wù)已啟動(dòng)")
})

在客戶端的代碼

 <script type="text/javascript">
    //jsonp跨域步驟
    //1.動(dòng)態(tài)創(chuàng)建一個(gè)script標(biāo)簽
    const newscript = document.createElement('script')
    //2.src指向接口的地址
    newscript.src = 'http://localhost:3000/api/data'
    document.body.appendChild(newscript  )
    //3.定義一個(gè)函數(shù)和后端調(diào)用的函數(shù)名一樣
    function toFront(res){
      //后臺(tái)返回的數(shù)據(jù)  這個(gè)函數(shù)是后臺(tái)服務(wù)調(diào)用過來的
      console.log(res) 
    }
  </script>

執(zhí)行的結(jié)果 ,返回一個(gè)JSON格式的文檔

到此這篇關(guān)于Node.js使用JSONP接口的具體用法的文章就介紹到這了,更多相關(guān)Node.js JSONP接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Node錯(cuò)誤處理筆記之挖坑系列教程

    Node錯(cuò)誤處理筆記之挖坑系列教程

    因?yàn)閚odejs是單線程的,所以一旦發(fā)生錯(cuò)誤或異常,如果沒有及時(shí)被處理整個(gè)系統(tǒng)就會(huì)崩潰。下面這篇文章主要給大家介紹了關(guān)于Node錯(cuò)誤處理筆記之挖坑系列的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧
    2018-06-06
  • nodejs實(shí)現(xiàn)的一個(gè)簡單聊天室功能分享

    nodejs實(shí)現(xiàn)的一個(gè)簡單聊天室功能分享

    這篇文章主要介紹了nodejs實(shí)現(xiàn)的一個(gè)簡單聊天室功能分享,本文使用了express和socket.io兩個(gè)庫結(jié)合實(shí)現(xiàn),需要的朋友可以參考下
    2014-12-12
  • better?sqlite3安裝node?gyp原生模塊編譯prebuild-install

    better?sqlite3安裝node?gyp原生模塊編譯prebuild-install

    這篇文章主要為大家介紹了Nodejs關(guān)于原生模塊編譯node-gyp?+?prebuild-install?(以安裝?better-sqlite3為例)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 用nodejs實(shí)現(xiàn)json和jsonp服務(wù)的方法

    用nodejs實(shí)現(xiàn)json和jsonp服務(wù)的方法

    本篇文章主要介紹了用nodejs實(shí)現(xiàn)json和jsonp服務(wù)的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • 詳解Nodejs 部署到阿里云全過程

    詳解Nodejs 部署到阿里云全過程

    這篇文章主要介紹了詳解Nodejs 部署到阿里云全過程,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-06-06
  • socket.io與pm2(cluster)集群搭配的解決方案

    socket.io與pm2(cluster)集群搭配的解決方案

    這篇文章主要給大家介紹了關(guān)于socket.io與pm2(cluster)集群搭配的解決方案,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來看看吧。
    2017-06-06
  • Node.js通過身份證號(hào)驗(yàn)證年齡、出生日期與性別方法示例

    Node.js通過身份證號(hào)驗(yàn)證年齡、出生日期與性別方法示例

    最近工作中需要對(duì)身份證號(hào)的年齡、出生日期與性別進(jìn)行驗(yàn)證,所以這篇文章主要介紹了Node.js通過身份證號(hào)驗(yàn)證年齡、出生日期與性別的方法,在介紹完node.js的實(shí)現(xiàn)方法后又給大家分類的利用JS實(shí)現(xiàn)的方法,需要的朋友可以參考下。
    2017-03-03
  • 基于Node.js實(shí)現(xiàn)一鍵生成個(gè)性化二維碼

    基于Node.js實(shí)現(xiàn)一鍵生成個(gè)性化二維碼

    這篇文章主要為大家詳細(xì)介紹了如何使用Node.js、Jimp和QRCode庫,結(jié)合一個(gè)簡單的腳本,通過命令行命令來快速給二維碼加上指定的背景,打造更有個(gè)性化的二維碼,感興趣的可以了解下
    2024-03-03
  • node.js連接mongoDB數(shù)據(jù)庫 快速搭建自己的web服務(wù)

    node.js連接mongoDB數(shù)據(jù)庫 快速搭建自己的web服務(wù)

    這篇文章主要為大家詳細(xì)介紹了node.js連接mongoDB數(shù)據(jù)庫,如何快速搭建自己的web服務(wù),感興趣的小伙伴們可以參考一下
    2016-04-04
  • Nodejs連接mysql并實(shí)現(xiàn)增、刪、改、查操作的方法詳解

    Nodejs連接mysql并實(shí)現(xiàn)增、刪、改、查操作的方法詳解

    這篇文章主要介紹了Nodejs連接mysql并實(shí)現(xiàn)增、刪、改、查操作的方法,結(jié)合實(shí)例形式詳細(xì)分析了nodejs針對(duì)mysql數(shù)據(jù)庫的的連接、mysql數(shù)據(jù)庫的創(chuàng)建及nodejs針對(duì)mysql增刪改查等相關(guān)操作具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-01-01

最新評(píng)論