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 相关文章推荐
如何在标题栏显示框架内页面的标题
Feb 03 Javascript
JQuery的ajax基础上的超强GridView展示
Sep 18 Javascript
iframe实用操作锦集
Apr 22 Javascript
使用window.prompt()实现弹出用户输入的对话框
Apr 13 Javascript
JavaScript使用addEventListener添加事件监听用法实例
Jun 01 Javascript
JS组件Form表单验证神器BootstrapValidator
Jan 26 Javascript
基于javascript实现九宫格大转盘效果
May 28 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
Sep 07 Javascript
Vue动态控制input的disabled属性的方法
Jun 26 Javascript
Vue中util的工具函数实例详解
Jul 08 Javascript
uploadify插件实现多个图片上传并预览
Sep 30 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
Feb 09 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计算两个整数的最大公约数常用算法小结
2015/03/05 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
2010/08/05 Javascript
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
js函数排序的实例代码
2013/07/01 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
浅谈bootstrap源码分析之tab(选项卡)
2016/06/06 Javascript
JS实现将数字金额转换为大写人民币汉字的方法
2016/08/02 Javascript
JS实现列表的响应式排版(推荐)
2016/09/01 Javascript
JavaScript的事件机制详解
2017/01/17 Javascript
利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)
2017/04/24 Javascript
使用vue-cli创建项目的图文教程(新手入门篇)
2018/05/02 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
react实现antd线上主题动态切换功能
2019/08/12 Javascript
vue 开发企业微信整合案例分析
2019/12/02 Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
2020/03/23 Javascript
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
django 常用orm操作详解
2017/09/13 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
python 批量修改/替换数据的实例
2018/07/25 Python
浅谈Python反射 & 单例模式
2019/03/21 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
如何用python写个模板引擎
2021/01/14 Python
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
俄罗斯品牌服装在线商店:VIPAVENUE
2020/08/10 全球购物
几个数据库方面的面试题
2016/07/01 面试题
考试作弊被抓检讨书
2014/01/10 职场文书
淘宝活动策划方案
2014/02/06 职场文书
竞选副班长演讲稿
2014/04/24 职场文书
詹天佑教学反思
2014/04/30 职场文书
服务口号大全
2014/06/11 职场文书
观看《周恩来的四个昼夜》思想汇报
2014/09/12 职场文书
教育局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
考研英语辞职信
2015/05/13 职场文书
如何用 Python 子进程关闭 Excel 自动化中的弹窗
2021/05/07 Python
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript