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作为变量名,多个…

前端“智能”静态资源管理 - Onebox - 博客园

前端“智能”静态资源管理 模块化/组件化开发,仅仅描述了一种开发理念,也可以认为是一种开发规范,倘若你认可这规范,对它的分治策略产生了共鸣,那我们就可以继续聊聊它的具体实现了。 很明显,模块化/组件化…

我们是如何做好前端工程化和静态资源管理 - 無雄 - 博客园

我们是如何做好前端工程化和静态资源管理 随着互联网的发展,我们的业务也日益变得更加复杂且多样化起来,前端工程师也不再只是做简单的页面开发这么简单,我们需要面对的十分复杂的系统性问题,例如,业务愈来愈复杂&…

峰度(Kurtosis)和偏度(Skewness)

峰度(Kurtosis) 定义峰度又称峰态系数,表征概率密度分布曲线在平均值处峰值高低的特征数,即是描述总体中所有取值分布形态陡缓程度的统计量。直观看来,峰度反映了峰部的尖度。这个统计量需要与正态分布相比较。 公式定…

多功能嵌入式解码软件(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…

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

编译原理--NFA/DFA

现成的, 讲义: https://www.cnblogs.com/AndyEvans/p/10240790.html https://www.cnblogs.com/AndyEvans/p/10241031.html 一个例子, 写得非常好. 一下子就全明白了, 尤其是像我这种没有听过编译原理课程的人. https://blog.csdn.net/tyler_download/article/details/53139240 …

OpenLayers3关于Map Export的Canvas跨域

一 Canvas跨域现象 地图导出是地图中常用的功能,并且OpenLayers3中也提供了两个地图导出的例子:http://openlayers.org/en/latest/examples/export-map.html http://openlayers.org/en/latest/examples/export-pdf.html。 看到这两个例子我们都很兴奋,直…

typescript-koa-postgresql 实现一个简单的rest风格服务器 —— 连接 postgresql 数据库...

接上一篇,这里使用 sequelize 来连接 postgresql 数据库 1、安装 sequelize,数据库驱动 pg yarn add sequelize sequelize-typescript pg reflect-metadata 2、新建配置文件夹 conf 及 配置文件 db.conf.ts /*** name: 数据库配置* param : undefined* r…

SmartGit使用教程

说明 官网的客户端是命令行形式的,有兴趣可以去了解下。这里针对图形界面的smartgit做一个使用说明。 软件下载和安装 下载地址[2016.12.16测试可以] 按需选择,如果不知道自己电脑是什么系统的,那我没话说了https://www.syntevo.com/smartgit/ 安装 …

jquery 下拉框 select2 运用 笔记

1,添加select2 样式 参考&#xff08;https://select2.org/ &#xff09; 2,Html: <select id"txtType" name"Type" class"form-control select2" multiple"multiple"> </select> 3,jquery section scripts{ $(documen…

获取浏览器屏幕高度(js,jq) - 进击的小牛牛 - 博客园

javascript IE中&#xff1a; document.body.clientWidth > BODY对象宽度 document.body.clientHeight > BODY对象高度 document.documentElement.clientWidth > 可见区域宽度 document.documentElement.clientHeight > 可见区域高度 FireFox中&#xff1a; docum…

第一个爬虫和测试

Python测试函数的方法之一是用&#xff1a;try……except def gameover(a,b):if a>10 and b>10 and abs(a-b)2:return Trueif (a>11 and b<11) or (a<11 and b>11):return Truereturn False try:agameover(10,11)print(a) except:print("Error") g…

JS组件系列——Bootstrap 树控件使用经验分享 - 懒得安分 - 博客园

前言&#xff1a;很多时候我们在项目中需要用到树&#xff0c;有些树仅仅是展示层级关系&#xff0c;有些树是为了展示和编辑层级关系&#xff0c;还有些树是为了选中项然后其他地方调用选中项。不管怎么样&#xff0c;树控件都是很多项目里面不可或缺的组件之一。今天&#xf…

蓝桥杯 历届试题 九宫重排 (bfs+康托展开去重优化)

Description 如下面第一个图的九宫格中&#xff0c;放着 1~8 的数字卡片&#xff0c;还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动&#xff0c;可以形成第二个图所示的局面。我们把第一个图的局面记为&#xff1a;12345678.把第二个图的局面…