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 相关文章推荐
js 火狐下取本地路径实现思路
Apr 02 Javascript
javascript 获取网页标题代码实例
Jan 22 Javascript
javascript/jquery获取地址栏url参数的方法
Mar 05 Javascript
详解AngularJS中的表格使用
Jun 16 Javascript
javascript日期操作详解(脚本之家整理)
Sep 05 Javascript
js仿百度切换皮肤功能(html+css)
Jul 10 Javascript
jQuery实现的简单拖拽功能示例
Sep 13 Javascript
Vuex之理解Getters的用法实例
Apr 19 Javascript
微信小程序 swiper组件构建轮播图的实例
Sep 20 Javascript
浅谈ES6 模板字符串的具体使用方法
Nov 07 Javascript
关于express与koa的使用对比详解
Jan 25 Javascript
angularjs1.5 组件内用函数向外传值的实例
Sep 30 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
阿里对象存储OSS在laravel框架中的使用方法
2019/10/13 PHP
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
javascript getElementsByName()的用法说明
2009/07/31 Javascript
比较全面的event对像在IE与FF中的区别 推荐
2009/09/21 Javascript
基于JQuery的asp.net树实现代码
2010/11/30 Javascript
基于jQuery选择器的整理集合
2013/04/26 Javascript
JQuery的ready函数与JS的onload的区别详解
2013/11/21 Javascript
利用jQuary实现文字浮动提示效果示例代码
2013/12/26 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
node.js中的url.parse方法使用说明
2014/12/10 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
AngularJS教程之简单应用程序示例
2016/08/16 Javascript
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
JS操作Fckeditor的一些常用方法(获取、插入等)
2020/02/19 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
Python内置函数的用法实例教程
2014/09/08 Python
Python实现多线程HTTP下载器示例
2017/02/11 Python
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
django实现前后台交互实例
2017/08/07 Python
python嵌套字典比较值与取值的实现示例
2017/11/03 Python
用Python写一个模拟qq聊天小程序的代码实例
2019/03/06 Python
Python第三方包之DingDingBot钉钉机器人
2020/04/09 Python
keras.utils.to_categorical和one hot格式解析
2020/07/02 Python
记一次Django响应超慢的解决过程
2020/09/17 Python
matplotlib之pyplot模块之标题(title()和suptitle())
2021/02/22 Python
护理职业应聘自荐书
2013/09/29 职场文书
大学生个人总结的自我评价
2013/10/05 职场文书
公司门卫管理制度
2014/02/01 职场文书
代办委托书怎样写
2014/04/08 职场文书
烹饪大赛策划方案
2014/05/26 职场文书
篮球赛口号
2014/06/18 职场文书
员工工作表现自我评价
2015/03/06 职场文书
一年级下册数学教学反思
2016/02/16 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
Java处理延时任务的常用几种解决方案
2022/06/01 Java/Android