1. 程式人生 > >JSONP 在前端的傳送和後臺node.js的處理

JSONP 在前端的傳送和後臺node.js的處理

最近做一個模組,前端用的是vue,後臺用的是node.js,由於涉及到跨域,所以選擇用JSONP進行前後臺互動,講一下自己的心得體會:

(1)後臺node.js  後臺node.js接收jsonp請求並返回資料非常簡單:
var express = require('express');
var router = express.Router();

router.get('/getinfo', function(req, res, next) {
  // 這一步JSONP必備
  var _callback = req.query.callback;
  // 這個responseData是後臺要傳回給前臺的資料
var responseData = { email: '[email protected]', name: 'jaxu' }; if (_callback){ // 這兩步設定傳送也是NODE.JS傳送JSONP必備 res.type('text/javascript'); res.send(_callback + '(' + JSON.stringify(responseData) + ')'); } else{ res.json(responseData); } }); module.exports = router;

(2) 前端向後臺傳送jsonp請求:

API
jsonp(url, opts, fn)

url (String) url to fetch
opts (Object), optional
param (String) name of the query string parameter to specify the callback (defaults to callback)
timeout (Number) how long after a timeout error is emitted. 0 to disable (defaults to 60000)
prefix (String) prefix for the global callback functions that handle jsonp responses (defaults to __jp)
name (String) name of the global callback functions that handle jsonp responses (defaults to prefix + incremented counter)
fn callback

在 vue中安裝好這個庫後,由於我向後端傳送請求是一般帶上資料傳送的,所以要把資料作為引數拼接到url中,所以要重新建立一個方法,在這方法中拼接傳送資料到url,再通過上面的jsonp方法傳送:

import originJSONP from 'jsonp'

// 寫一個獲取jsonp資料的方法
export default function jsonp (url, data, option) {
  url += (url.indexOf('?') < 0 ? '?' : '&') + param(data)
  return new Promise((resolve, reject) => {
    originJSONP(url, option, (err, data) => {
      if (!err) {
        resolve(data)
      } else {
        reject(err)
      }
    })
  })
}
// 資料拼接到url
function param (data) {
  let url = ''
  for (let k in data) {
    let value = data[k] !== undefined ? data[k] : ''
    url += `&${k}=${encodeURIComponent(value)}`
  }
  return url ? url.substring(1) : ''
}

實際傳送時使用這個方法:

// data為向後臺傳送的資料
export function getContact(data) {
  const url = '傳送地址'

  const options = {
     param: 'callback'
  }
  return jsonp(url, data, options)
}

這樣就實現了前後端的jsonp傳遞

相關推薦

JSONP前端傳送後臺node.js處理

最近做一個模組,前端用的是vue,後臺用的是node.js,由於涉及到跨域,所以選擇用JSONP進行前後臺互動,講一下自己的心得體會: (1)後臺node.js 後臺node.js接收jsonp請求並返回資料非常簡單: var express = r

簡單的ajax讓前端jquery與後臺node.js互動

作為一個前端程式設計師,這幾天突然看到node.js這個東西,突然就產生了非常濃厚的興趣,跟著網上的教程完成了第一個簡單的前端與後臺互動的程式。 最近node.js也很火,大家如果有也想學習這個好玩的東西的,可以借鑑這這篇文章開始你的node之路。 html內容 <!

最新前端React Native,後臺Node.js,用輕量級架構開發一款直接在AppStore上線的App

前端React Native,後臺Node.js,用輕量級架構開發一款直接在AppStore上線的App,只需一週時間! 這不是一門技術多麼高深的課程 卻可以讓你快速開發一款App 一週開發一款非常“好玩兒”的上線App 這是一款已經在App store上線的App,源於講師一

node入門demo-Ajax讓前端angularjs/jquery與後臺node.js互動,技術支援:mysql+html+angularjs/jquery

只貼出關鍵程式碼,具體的基礎配置,在dos視窗中鍵入express -e phone,會自動幫我們設定好app.js的配置 為了讓nodejs可以渲染html頁面,在dos視窗中鍵入npm install ejs --save,會自動幫ejs的相關配置下載如node_modules資料

redis前端啟動後臺啟動的區別

class 好的 報錯 isp 根目錄 執行 font 端口 服務器 Part I. 直接啟動下載官網下載安裝tar zxvf redis-2.8.9.tar.gzcd redis-2.8.9#直接make 編譯make#可使用root用戶執行`make install

征服大前端第二季(Node.js、Angular 4、Express 4、Keystone 4)

mys keystone 學習 集成 keys 平臺開發 把手 大型 sql 征服大前端第二季(Node.js、Angular 4、Express 4、Keystone 4、MongoDB、MySQL)網盤地址:https://pan.baidu.com/s/1RFi_3H

Node.js處理 Access-Control-Allow-Origin (Vue)

第一步:安裝cors庫 npm install koa2-cors   第二步:進入APP.JS檔案 const cors=require('koa2-cors')   //引入 第三步:USE app.use(cors()); &

web前端課程技術總結Node.js 使用方法及相關方法分析

測試 一個 ejs 強制 req != server 跨域 ade Node.js 使用方法及相關方法分析 首先我們要了解什麽是node.js? 官方解釋是:node.js是一個基於Chrome v8引擎的javascript 運行環境。Node.js使用了一個事件驅動、非

Node.js處理 Access-Control-Allow-Origin

第一步:安裝cors庫 npm install koa2-cors   第二步:進入APP.JS檔案 const cors=require('koa2-cors')   //引入 第三步:USE

學習mysql安裝node.js使用

學習mysql安裝和在node.js使用 一,安裝window上mysql https://www.cnblogs.com/xsmile/p/7753984.html 二,node連線資料庫 首先引入mysql, var connection = mysql.cre

前端菜鳥學node.js初體驗(一)

如今,nodejs如此之火,讓我這個打算從事前端開發的小白,也忍不住要學習一下,然而剛剛接觸nodejs,就深深的喜歡上了這個語言。 下面我將分享一下我最初學習nodejs時的總結的學習經驗,也是總結一下近期學習的知識,還會總結我在學習中遇到的困難,又是如何解

後臺js 處理Get方式提交的中文引數亂碼問題

1.javascript對URL中的中文處理       使用方法是:encodeURI(url)      注意: 有人說:一定要使用兩次,也就是encodeURI(encodeURI(url))。否則很有可能還是亂碼。但是我解決的的方式是:encodeURI(u

用xslxml加js處理

把下面的文字儲存成main.xsl ------------------------------------ <?xml version="1.0" encoding="utf-8"?><xsl:transform version="1.0"  xmlns:

前端傳送url地址後端處理

這個問題是在微信jssdk獲取access_token時遇到的,感覺網上涉及的資料似乎不多,大致來講是這樣處理的: 前端js使用encodeURIComponent函式處理url: encodeURIComponent() 後端PHP部分採用htmlspecialch

node.js後臺快速搭建在阿裏雲(二)(pm2nginx篇)

logs down key version c-c 6.2 文檔 實例 gin 前期準備 阿裏雲服務器 node.js pm2 express nginx linux(推薦教程:鳥哥的私房菜) 簡介 嗯……我只是

前端走向後臺node.js基本

結果 設置 runt 編碼格式 搭建 平臺 屬於 瀏覽器 調用   作為一個前端開發人員,靜態網頁不僅僅是我們的工作,我們需要與後臺做好配合,才能使網頁變得非常的靈活與多用。如果我們要做一些後臺的簡單開發與使用,那麽,node.js是很好的選擇。那麽,對於沒有接觸過node

Node.js、npm一些前端知識解惑

code ref HA 管理系 gulp model 記錄 管理工具 use 對以往經歷過原生App開發、當前主要做後端開發的我這樣一個童鞋來說,不僅覺得Web前端布局繁雜,並且對其技術體系了解不深,人說當今是大前端時代,微信推出小程序後我也開始接觸到相關的開發,現在很多開

c++通過dispatchCustomEvent傳送事件,通知js層,進入前臺後臺

// This function will be called when the app is inactive. When comes a phone call,it's be invoked too void AppDelegate::applicationDidEnterBackgroun

獨角獸公司招聘多個資深技術崗位,包括網路爬蟲-後臺工程師、ReactJS 前端工程師、Python 後臺工程師、Node.Js-後臺開發工程師、PHP 後臺工程師、DevOps 運維工程師 SRE

深圳樂途優聘獵頭公司獵頭顧問Mary Ma(微信lookforward1702) 歡迎使用Markdown編輯器 你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,瞭解一下Mar

node.js——http服務、服務代理、後臺跨域

http HTTP協議(HyperText Transfer Protocol,超文字傳輸協議)是用於從WWW伺服器傳輸超文字到本地瀏覽器的傳輸協議。它可以使瀏覽器更加高效,使網路傳輸減少。它不僅保證計算機正確快速地傳輸超文字文件,還確定傳輸文件中的哪一部分,