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编程起步(第一课)
Jan 10 Javascript
javascript跑马灯悬停放大效果实现代码
Dec 12 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
Nov 23 Javascript
ff下JQuery无法监听input的keyup事件的解决方法
Dec 12 Javascript
用JQuery实现全选与取消的两种简单方法
Feb 22 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
Mar 02 Javascript
jQuery插件kinMaxShow扩展效果用法实例
May 04 Javascript
深入理解jQuery之防止冒泡事件
May 24 Javascript
详解用vue.js和laravel实现微信支付
Jun 23 Javascript
详解Vue2.x-directive的学习笔记
Jul 17 Javascript
使用Vue.set()方法实现响应式修改数组数据步骤
Nov 09 Javascript
vue 如何使用递归组件
Oct 23 Javascript
用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中的面向对象OOP中的魔术方法
2017/06/12 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
JavaScript中的History历史对象
2008/01/16 Javascript
JAVASCRIPT下判断IE与FF的比较简单的方式
2008/10/17 Javascript
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
利用js 进行输入框自动匹配字符的小例子
2013/06/29 Javascript
js简单实现让文本框内容逐个字的显示出来
2013/10/22 Javascript
JavaScript闭包函数访问外部变量的方法
2014/08/27 Javascript
jQuery制作拼图小游戏
2015/01/12 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
2015/04/26 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
2015/09/07 Javascript
js实现无缝滚动特效
2015/12/20 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
2016/08/04 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
ES6中箭头函数的定义与调用方式详解
2017/06/02 Javascript
CSS3+JavaScript实现翻页幻灯片效果
2017/06/28 Javascript
vue项目关闭eslint校验
2018/03/21 Javascript
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
Js中使用正则表达式验证输入是否有特殊字符
2018/09/07 Javascript
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
thinkjs微信中控之微信鉴权登陆的实现代码
2019/08/08 Javascript
vue-router路由模式详解(小结)
2019/08/26 Javascript
结合axios对项目中的api请求进行封装操作
2020/09/21 Javascript
python使用urllib2模块获取gravatar头像实例
2013/12/18 Python
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
Django Admin中增加导出CSV功能过程解析
2019/09/04 Python
Django实现CAS+OAuth2的方法示例
2019/10/30 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
班级心理活动总结
2014/07/04 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
MySQL数据库压缩版本安装与配置详细教程
2021/05/21 MySQL
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python
Python借助with语句实现代码段只执行有限次
2022/03/23 Python