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 相关文章推荐
List Installed Hot Fixes
Jun 12 Javascript
jquery通过a标签删除table中的一行的代码
Dec 02 Javascript
angularJS结合canvas画图例子
Feb 09 Javascript
jQuery检测某个元素是否存在代码分享
Jul 09 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
May 16 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
Jun 22 Javascript
Vue2.0组件间数据传递示例
Mar 07 Javascript
Vue.js路由vue-router使用方法详解
Mar 20 Javascript
jquery DataTable实现前后台动态分页
Jun 17 jQuery
VUE实现一个分页组件的示例
Sep 13 Javascript
解决vue中修改export default中脚本报一大堆错的问题
Aug 27 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
May 11 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 应用程序安全防范技术研究
2009/09/25 PHP
浅谈php函数serialize()与unserialize()的使用方法
2014/08/19 PHP
谈谈PHP连接Access数据库的注意事项
2016/08/12 PHP
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
把jQuery的类、插件封装成seajs的模块的方法
2014/03/12 Javascript
javascript实现节点(div)名称编辑
2014/12/17 Javascript
JavaScript中使用Object.create()创建对象介绍
2014/12/30 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
2015/05/09 Javascript
JavaScript中使用数组方法汇总
2016/02/16 Javascript
基于Angularjs实现分页功能
2016/05/30 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
vue2.0之多页面的开发的示例
2018/01/30 Javascript
Spring Boot/VUE中路由传递参数的实现代码
2018/03/02 Javascript
Angular使用动态加载组件方法实现Dialog的示例
2018/05/11 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
[04:03]辉夜杯主赛事 12月25日RECAP精彩回顾
2015/12/26 DOTA
Python中集合类型(set)学习小结
2015/01/28 Python
详解Python3中yield生成器的用法
2015/08/20 Python
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
Python中操作符重载用法分析
2016/04/29 Python
使用 Python 实现微信公众号粉丝迁移流程
2018/01/03 Python
python 2.7.13 安装配置方法图文教程
2018/09/18 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
Python面向对象之多态原理与用法案例分析
2019/12/30 Python
加热夹克:RAVEAN
2018/10/19 全球购物
全球工业:Global Industrial
2020/02/01 全球购物
园林设计师自荐信
2013/11/18 职场文书
电子商务专业推荐信范文
2013/12/02 职场文书
水电站项目建议书
2014/05/12 职场文书
开展党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
学术会议通知范文
2015/04/15 职场文书
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android
Python Pandas数据分析之iloc和loc的用法详解
2021/11/11 Python
《艾尔登法环》发布最新「战技」宣传片
2022/04/03 其他游戏