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 相关文章推荐
无语,javascript居然支持中文(unicode)编程!
Apr 12 Javascript
javascript显示选择目录对话框的代码
Nov 10 Javascript
不使用中间变量,交换int型的 a, b两个变量的值。
Oct 29 Javascript
jQuery is()函数用法3例
May 06 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
Apr 05 Javascript
javascript css红色经典选项卡效果实现代码
May 17 Javascript
深入理解JavaScript函数参数(推荐)
Jul 26 Javascript
JS设置时间无效问题的解决办法
Feb 18 Javascript
js eval函数使用,js对象和字符串互转实例
Mar 06 Javascript
jQuery输入框密码的显示隐藏【代码分享】
Apr 29 jQuery
vue页面更新patch的实现示例
Mar 25 Javascript
vue/cli 配置动态代理无需重启服务的方法
May 20 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
VML绘图板②脚本--VMLgraph.js、XMLtool.js
2006/10/09 PHP
php实现数组按指定KEY排序的方法
2015/03/30 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
几个javascript操作word的参考代码
2009/10/26 Javascript
javascript中的self和this用法小结
2014/02/08 Javascript
纯js写的分页表格数据为json串
2014/02/18 Javascript
jquery实现点击文字可编辑并修改保存至数据库
2014/04/15 Javascript
JQuery插件Marquee.js实现无缝滚动效果
2016/04/26 Javascript
VUE JS 使用组件实现双向绑定的示例代码
2017/01/10 Javascript
支持移动端原生js轮播图
2017/02/16 Javascript
Bootstrap一款超好用的前端框架
2017/09/25 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
Angular中管道操作符(|)的使用方法
2017/12/15 Javascript
JS中的事件委托实例浅析
2018/03/22 Javascript
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
2018/09/18 Javascript
node全局变量__dirname与__filename的区别
2019/01/14 Javascript
jquery实现掷骰子小游戏
2019/10/24 jQuery
通过原生vue添加滚动加载更多功能
2019/11/21 Javascript
原生JavaScript实现滑动拖动验证的示例代码
2019/12/06 Javascript
jQuery擦除插件eraser使用方法详解
2020/01/11 jQuery
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
Windows下Python2与Python3两个版本共存的方法详解
2017/02/12 Python
一个基于flask的web应用诞生 flask和mysql相连(4)
2017/04/11 Python
python的中异常处理机制
2018/08/30 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
详解python polyscope库的安装和例程
2020/11/13 Python
python3中确保枚举值代码分析
2020/12/02 Python
世界各地的当地人的食物体验:Eatwith
2019/07/26 全球购物
Order by的几种用法
2013/06/16 面试题
介绍一下RMI的基本概念
2016/12/17 面试题
优秀教师的感人事迹
2014/02/04 职场文书
小学生感恩演讲稿
2014/04/25 职场文书
终止劳动合同协议书
2014/10/05 职场文书
MySQL数据库 任意ip连接方法
2022/05/20 MySQL