Node.js 实现简单的接口服务器的实例代码


Posted in Javascript onMay 23, 2017

通过Node.js来实现接口服务器的功能。主要特点为:

1) 增加接口不需要重启

2) 异步执行,但接口阅读的时候是同步的代码(从上而下),或者可以按需求并行,串行

这里只是抛出基本思路,所以使用GET,也没有加密之类的

首先启动监听端口,配置好访问规则。(通过识别特定URL ,动态执行相应的接口脚本)

-----
  |----HamstrerServlet
  | ------ command3G
    | ------ login.js  //登录脚本(这里只是简单演示)
 | --- server.js (主启动脚本)
 | --- dbutil (数据库操作)

server.js

var $ = require('jquery'); 
var _ = require('underscore'); 
var vm = require('vm'); 
var fs = require('fs'); 
var journey = require('journey'); 
var async = require('async'); 
var dbutil = require('./dbutil'); 
 
String.prototype.replaceAll = function(s1, s2) { 
  var demo = this 
  while (demo.indexOf(s1) != - 1) 
  demo = demo.replace(s1, s2); 
  return demo; 
} 
// Create a Router 
var router = new(journey.Router); 
 
// Create the routing table 
router.map(function() { 
  // this.root.bind(function (req, res) { res.send("Welcome") }); 
  this.get(/HamstrerServlet\/(\w*\W*\w*)*/).bind(function(req, res, id) { 
    var runJsPath = this.request.url.pathname.replaceAll("/HamstrerServlet", "") + ".js"; 
    console.log("执行的脚本文件:" + runJsPath); 
 
    //传入的绑定变量 
    var sandbox = { 
      req: req, 
      res: res, 
      $: $, 
      dbutil: dbutil, 
      async: async, 
      console: console 
    }; 
 
    fs.readFile('./HamstrerServlet' + runJsPath, function(err, data) { 
      vm.runInNewContext(data, sandbox, 'myfile.vm'); 
    }); 
 
  }); 
  this.post('/^HamstrerServlet\/(\w*)$/)').bind(function(req, res, data) { 
    res.send(200); 
  }); 
}); 
 
require('http').createServer(function(request, response) { 
  var body = ""; 
 
  request.addListener('data', function(chunk) { 
    body += chunk 
  }); 
  request.addListener('end', function() { 
    router.handle(request, body, function(result) { 
      response.writeHead(result.status, result.headers); 
      response.end(result.body); 
    }); 
  }); 
}).listen(8080);

dbutil.js

var mysql = require('mysql'); //导入mysql Module 
 
var pool = mysql.createPool({ 
  host: '192.168.140.237', 
  user: 'root', 
  password: '123456', 
  database: 'command3G' 
}); 
 
//查询sql语句 
function query(strSQL, param, callback) { 
  pool.getConnection(function(err, connection) { 
    connection.query(strSQL, param, function(err, rows, fields) { 
      if (err) throw err; 
      callback(rows, fields); 
      connection.end(); 
      // connection.destroy(); 
    }); 
  }); 
} 
 
exports.query = query;

login.js

console.log("beigin"); 
 
//并行处理,相当于2个map最后再做一个ReReduce 
async.parallel([ 
  function(callback){ 
    // 从数据库中获取当前时间 
    dbutil.query("SELECT CURTIME() AS DATE",null,function(rows,fields){ 
      callback(null, rows[0].DATE); 
    }); 
  }, 
  function(callback){ 
    //随便返回一个值 
    callback(null, '中文测试'); 
  } 
], 
function(err, results){ 
  console.log(results); 
  var retVal ={ 
    "currentTime": results[0], 
    "desc": results[1] 
  }; 
  res.sendBody(JSON.stringify(retVal)); 
});

node server.js 启动后通过访问 http://localhost:8080/HamstrerServlet/command3G/login

就会输出:

Node.js 实现简单的接口服务器的实例代码

这个时候修改login.js都会及时生效,不需要重新启动服务器

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery学习4 浏览器的事件模型
Feb 07 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
Aug 27 Javascript
Jquery之Ajax运用 学习运用篇
Sep 26 Javascript
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
Mar 11 Javascript
js调用webservice构造SOAP进行身份验证
Apr 27 Javascript
微信小程序 setData的使用方法详解
Apr 20 Javascript
VUE多层路由嵌套实现代码
May 15 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
Jan 21 Javascript
JS中的防抖与节流及作用详解
Apr 01 Javascript
JS异步错误捕获的一些事小结
Apr 26 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
Jun 18 jQuery
vue实现可移动的悬浮按钮
Mar 04 Vue.js
用angular实现多选按钮的全选与反选实例代码
May 23 #Javascript
详解vue嵌套路由-params传递参数
May 23 #Javascript
详解vue嵌套路由-query传递参数
May 23 #Javascript
vue-router 中router-view不能渲染的解决方法
May 23 #Javascript
angular+webpack2实战例子
May 23 #Javascript
jquery实现图片轮播器
May 23 #jQuery
详解用node编写自己的cli工具
May 23 #Javascript
You might like
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
2016/05/16 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
2016/09/11 PHP
php简单构造json多维数组的方法示例
2017/06/08 PHP
css动画效果之animation的常用样式
2021/03/09 HTML / CSS
input的focus方法使用
2010/03/13 Javascript
JS 按钮点击触发(兼容IE、火狐)
2013/08/07 Javascript
提取jquery的ready()方法单独使用示例
2014/03/25 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
浅谈JS闭包中的循环绑定处理程序
2014/11/09 Javascript
JavaScript操作cookie类实例
2015/03/31 Javascript
浅谈javascript原型链与继承
2015/07/13 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
2015/11/03 Javascript
jQuery中select与datalist制作下拉菜单时的区别浅析
2016/12/30 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
详解Node.js 中使用 ECDSA 签名遇到的坑
2018/11/26 Javascript
JavaScript中0、空字符串、'0'是true还是false的知识点分享
2019/09/16 Javascript
element中Steps步骤条和Tabs标签页关联的解决
2020/12/08 Javascript
[16:21]教你分分钟做大人:圣堂刺客
2014/12/03 DOTA
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
2015/04/25 Python
使用Python进行AES加密和解密的示例代码
2018/02/02 Python
python代码 FTP备份交换机配置脚本实例解析
2019/08/01 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
Python函数的定义方式与函数参数问题实例分析
2019/12/26 Python
python温度转换华氏温度实现代码
2020/12/06 Python
localstorage和sessionstorage使用记录(推荐)
2017/05/23 HTML / CSS
BAILEY 44官网:美国制造的女性服装
2019/07/01 全球购物
德国购买门票网站:ADticket.de
2019/10/31 全球购物
Vilebrequin美国官方网上商店:法国豪华泳装品牌
2020/02/22 全球购物
交通事故私了协议书
2014/04/16 职场文书
简单通用的简历自我评价
2014/09/21 职场文书
预备党员自我评价范文
2015/03/04 职场文书
农业项目投资意向书
2015/05/09 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
MySQL学习必备条件查询数据
2022/03/25 MySQL