expressjs路由和Nodejs伺服器端傳送REST請求 - - ITeye部落格

劍指大前端發表於2020-11-06

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/ 

相關文章