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.mzph.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.在全局中安装…