expressjs路由和Nodejs服務器端發送REST請求 - - ITeye博客

Nodejs創建自己的server后,我們如果需要從客戶端利用ajax調用別的服務器端的數據API的接口,這時候出現了ajax跨域問題。?

一種是利用在客戶端解決跨域問題?
這種方案大家可以去網上查查?

另一種方案是在服務器端去請求別的服務器,然后將數據再返回客戶端.這里就涉及到了:?
ajax請求,expressjs接收請求,Nodejs發送REST請求。?

我著重寫寫關于這個方案的解決方法:?

首先利用express創建路由,接收客戶端發送的不同請求。?

express路由可以接收get請求和post請求。?

get請求可以去看API,因為平時我們可能對JSON的處理較多,所以用到POST請求較多,我這里主要寫寫post請求。?

客戶端發送請求:?
客戶端代碼:?

Java代碼?

?收藏代碼

  1. $.ajax({??
  2. ??
  3. ???????type:?'POST',??
  4. ??
  5. ???????contentType:?'application/json',??
  6. ??
  7. ???????url:?'/internaltool/project/peoples',??
  8. ??
  9. ???????data:?null,??
  10. ??
  11. ???????async:?false,??
  12. ??
  13. ???????dataType:?'json',??
  14. ??
  15. ???????success:function?(data){??
  16. ??
  17. ???????????result?=?data;??
  18. ??
  19. ???????},??
  20. ??
  21. ???????error:?function?()?{??
  22. ??
  23. ???????????alert("Save?error!");??
  24. ??
  25. ???????}??
  26. ??
  27. ???});??
  28. ??
  29. ??
  30. ??
  31. ???????$.ajax({??
  32. ??
  33. ???????????type:?'POST',??
  34. ??
  35. ???????????contentType:?'application/json',??
  36. ??
  37. ???????????url:??'/internaltool/project/peopleInfoById',??
  38. ??
  39. ???????????data:?'{"id":?"811435467"}',??
  40. ??
  41. ???????????async:?false,??
  42. ??
  43. ???????????dataType:?'json',??
  44. ??
  45. ???????????success:function?(data){??
  46. ??
  47. ???????????},??
  48. ??
  49. ???????????error:?function?()?{??
  50. ??
  51. ???????????????alert("Save?error!");??
  52. ??
  53. ???????????}??
  54. ??
  55. ???????});??




Nodejs接收客戶端發送的請求,并且Nodejs服務器端發送REST請求別的服務器端取得數據。?
Nodejs服務器端的代碼:?

Java代碼?

?收藏代碼

  1. var?express?=?require('express'),??
  2. ????sr??????=?require('./static_require'),??
  3. ????app?????=?express.createServer();??
  4. ???
  5. ????//?linql?2012/08/13?Add???
  6. ????app.configure(function(){??
  7. ????????app.use(express.methodOverride());??
  8. ????????app.use(express.bodyParser());??
  9. ????????app.use(app.router);??
  10. ????});??
  11. ????//?End??
  12. var?http?=?require('http');??
  13. ???
  14. exports.init?=?function(here)?{??
  15. ????app.get('/*.js',?sr.getHandler({??
  16. ????????searchPaths:?[here]??
  17. ????}));??
  18. ???
  19. ????app.get('/*',?function(req,?res)?{??
  20. ????????res.sendfile(req.param(0))??
  21. ????});??
  22. ???
  23. ????//?linql?2012/08/13?Add??
  24. ????//?這種情況是普通請求,不帶有json數據處理??
  25. ????app.post('/internaltool/project/peoples',?function(req,?res)?{??
  26. ????????//?the?post?options??
  27. ????????var?optionspost?=?{??
  28. ????????????host?:?'192.168.1.1',??
  29. ????????????port?:?'8080',??
  30. ????????????path?:?'/managesystem/Project/personList',??
  31. ????????????method?:?'POST'??
  32. ????????};??
  33. ???
  34. ????????//?do?the?POST?call??
  35. ????????//?服務器端發送REST請求??
  36. ????????var?reqPost?=?http.request(optionspost,?function(resPost)?{??
  37. ????????????resPost.on('data',?function(d)?{??
  38. ????????????????res.send(d);??
  39. ????????????});??
  40. ????????});??
  41. ???
  42. ????????reqPost.end();??
  43. ???
  44. ????????reqPost.on('error',?function(e)?{??
  45. ????????????console.error(e);??
  46. ????????});??
  47. ????});??
  48. ???
  49. ????app.post('/internaltool/project/peopleInfoById',?function(req,?res)?{??
  50. ????????//?Request?of?JSON?data??
  51. ????????//?接收客戶端的JSON數據??
  52. ????????var?reqJosnData?=?JSON.stringify(req.body);??
  53. ???
  54. ????????//?do?a?POST?request??
  55. ????????//?prepare?the?header??
  56. ????????var?postheaders?=?{??
  57. ????????????'Content-Type'?:?'application/json;?charset=UTF-8',??
  58. ????????????'Content-Length'?:?Buffer.byteLength(reqJosnData,?'utf8')??
  59. ????????};??
  60. ???
  61. ????????//?the?post?options??
  62. ????????var?optionspost?=?{??
  63. ????????????host?:?'192.168.1.1',??
  64. ????????????port?:?'8080',??
  65. ????????????path?:?'/managesystem/Project/personMessageById',??
  66. ????????????method?:?'POST',??
  67. ????????????headers?:?postheaders??
  68. ????????};??
  69. ???
  70. ????????//?do?the?POST?call??
  71. ????????var?reqPost?=?http.request(optionspost,?function(resPost)?{??
  72. ???
  73. ????????????resPost.on('data',?function(d)?{??
  74. ????????????????res.send(d);??
  75. ????????????});??
  76. ????????});??
  77. ???
  78. ????????//?write?the?json?data??
  79. ????????//?發送REST請求時傳入JSON數據??
  80. ????????reqPost.write(reqJosnData);??
  81. ????????reqPost.end();??
  82. ????????reqPost.on('error',?function(e)?{??
  83. ????????????console.error(e);??
  84. ????????});??
  85. ????});??
  86. ????//?End??
  87. };??




關于expres.js可以參照:?
http://www.csser.com/board/4f77e6f996ca600f78000936?

Nodejs發送REST請求可以參照:?
http://isolasoftware.it/2012/05/28/call-rest-api-with-node-js/?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248940.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248940.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248940.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Jmeter操作mysql數據庫測試

1. 選中線程組鼠標點擊右鍵添加-->配置元件-->JDBC Connection Configuration; 2. DataBase Connection Configuration配置 Variable Name:配置元件的的所有配置所保存的變量,自定義變量名稱(不能使用mysql作為變量名,多個…

axios發送自定義請求頭的跨域解決

前端發送來的axios請求信息 this.$axios.request({ url:http://127.0.0.1:8001/pay/shoppingcar/, method:post, headers:{ authenticate:a073b3dabbb140e8b9d28debb6a356a1 # 自定義的請求頭部信息鍵值對, }, # 接上,這種key也算是一種請求頭,需要加入django中間件內…

前端“智能”靜態資源管理 - Onebox - 博客園

前端“智能”靜態資源管理 模塊化/組件化開發,僅僅描述了一種開發理念,也可以認為是一種開發規范,倘若你認可這規范,對它的分治策略產生了共鳴,那我們就可以繼續聊聊它的具體實現了。 很明顯,模塊化/組件化…

【轉】幾張圖看懂列式存儲

幾張圖看懂列式存儲 轉載于:https://www.cnblogs.com/apeway/p/10870211.html

hive -e和hive -f的區別(轉)

大家都知道,hive -f 后面指定的是一個文件,然后文件里面直接寫sql,就可以運行hive的sql,hive -e 后面是直接用雙引號拼接hivesql,然后就可以執行命令。 但是,有這么一個東西,我的sql當中有一個s…

我們是如何做好前端工程化和靜態資源管理 - 無雄 - 博客園

我們是如何做好前端工程化和靜態資源管理 隨著互聯網的發展,我們的業務也日益變得更加復雜且多樣化起來,前端工程師也不再只是做簡單的頁面開發這么簡單,我們需要面對的十分復雜的系統性問題,例如,業務愈來愈復雜&…

Mybatis-plus之RowBounds實現分頁查詢

物理分頁和邏輯分頁 物理分頁:直接從數據庫中拿出我們需要的數據,例如在Mysql中使用limit。 邏輯分頁:從數據庫中拿出所有符合要求的數據,然后再從這些數據中拿到我們需要的分頁數據。 優缺點 物理分頁每次都要訪問數據庫&#xf…

常見的6種JavaScript設計模式

常見的6種JavaScript設計模式 構造函數模式 /*** 構造一個動物的函數 */ function Animal(name, color){this.name name;this.color color;this.getName function(){return this.name;} } // 實例一個對象 var cat new Animal(貓, 白色); console.log( cat.getName() );工…

峰度(Kurtosis)和偏度(Skewness)

峰度(Kurtosis) 定義峰度又稱峰態系數,表征概率密度分布曲線在平均值處峰值高低的特征數,即是描述總體中所有取值分布形態陡緩程度的統計量。直觀看來,峰度反映了峰部的尖度。這個統計量需要與正態分布相比較。 公式定…

1.27

測試程序提出問題并解決轉載于:https://www.cnblogs.com/JustinTimberlake/p/10028870.html

javascript設計模式系列 - LukeLin - 博客園

javascript設計模式系列 創建型: 1.抽象工廠模式(Abstract Factory) 2.構建者模式(Builder) 3.工廠方法模式(Factory Method) 4.原型模式(Prototype) 5.單例模式&a…

多功能嵌入式解碼軟件(2)

多功能嵌入式解碼軟件(2) 驗證類庫 通信協議 下面進行一個示例: 下位機需要向上位機發送3中數據幀,數據幀以功能碼來識別,每種數據幀的協議如下3個表格所示,上位機需要把這些數據按照協議解碼出來&#xff…

vue項目如何打包扔向服務器 - Hi-Sen - 博客園

當我們將 vue 項目完成后,面臨的就是如何將項目進行打包上線,放到服務器中。我使用的是 vue-cli(simple) 腳手架,所以就講一下如何將項目進行打包,并放到 tomcat 上。 如果是 vue-cli (非 simple 腳手架…

MySQL備份與恢復-mysqldump備份與恢復

這片博文主要用來介紹MySQL的備份與恢復: MySQL的備份形式可以分為如下幾種: 熱備----即不停機備份冷備----需要關閉MySQL,然后備份其數據文件。(停機備份一般是直接拷貝其datadir目錄)溫備----在線備份,對…

第六次實訓作業異常處理

第六次實訓作業異常處理 編寫一個類ExceptionTest,在main方法中使用try-catch-finally語句結構實現:在try語句塊中,編寫兩個數相除操作,相除的兩個操作數要求程序運行時用戶輸入;在catch語句塊中,捕獲被0除…

k8s學習筆記-調度之Affinity

Kubernetes中的調度策略可以大致分為兩種 一種是全局的調度策略,要在啟動調度器時配置,包括kubernetes調度器自帶的各種predicates和priorities算法,具體可以參看上一篇文章; 另一種是運行時調度策略,包括nodeAffinity…

vue-cli webpack配置分析 - chenBright - SegmentFault 思否

相信vue使用者對vue-cli都不會陌生,甚至可以說,很熟悉了,但對其webpack的配置可能知之甚少吧。 過完年回來后,我接手了公司的新項目。新項目是一個spa。很自然,我就想到了vue-cli腳手架了,當時研究一下它的…

[Xcode 實際操作]六、媒體與動畫-(6)使用UIBlurEffect給圖片添加模糊效果

目錄:[Swift]Xcode實際操作 本文將演示如何給圖像添加模糊效果。 在項目導航區,打開視圖控制器的代碼文件【ViewController.swift】 1 import UIKit2 3 class ViewController: UIViewController {4 5 override func viewDidLoad() {6 super.…

MapReduce編程實踐

一、MapReduce編程思想 學些MapRedcue主要是學習它的編程思想,在MR的編程模型中,主要思想是把對數據的運算流程分成map和reduce兩個階段: Map階段:讀取原始數據,形成key-value數據(map方法)。即…

webpack基礎+webpack配置文件常用配置項介紹+webpack-dev-server - QxQstar - 博客園

一.webpack基礎 1.在項目中生成package.json:在項目根目錄中輸入npm init,根據提示輸入相應信息。(也可以不生成package.json文件,但是package.json是很有用的,所有建議生成) 2.安裝webpaack a.在全局中安裝…