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 相关文章推荐
jquery tools之tabs 选项卡/页签
Jul 25 Javascript
javascript实现的弹出层背景置灰-模拟(easyui dialog)
Dec 27 Javascript
jquery中trigger()无法触发hover事件的解决方法
May 07 Javascript
javascript常用函数(1)
Nov 04 Javascript
超赞的jQuery图片滑块动画特效代码汇总
Jan 25 Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
Apr 18 Javascript
angular2倒计时组件使用详解
Jan 12 Javascript
jquery 仿锚点跳转到页面指定位置的实例
Feb 14 Javascript
angular学习之ngRoute路由机制
Apr 12 Javascript
基于原生js运动方式关键点的总结(推荐)
Oct 01 Javascript
layer弹出层扩展主题的方法
Sep 11 Javascript
JQuery表单元素取值赋值方法总结
May 12 jQuery
用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遍历CSV类实例
2015/04/14 PHP
Yii2 rbac权限控制之菜单menu实例教程
2016/04/28 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
2017/07/03 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
JavaScript创建对象的写法
2013/08/29 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
JS获取URL中的参数数据
2013/12/05 Javascript
详解JavaScript的回调函数
2015/11/20 Javascript
jQuery实现获取table表格第一列值的方法
2016/03/01 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
2017/07/07 Javascript
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
AngularJS实现的生成随机数与猜数字大小功能示例
2017/12/25 Javascript
vue.js在标签属性中插入变量参数的方法
2018/03/06 Javascript
[26:40]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第一局
2016/02/25 DOTA
Python生成随机MAC地址
2015/03/10 Python
Python3 模块、包调用&路径详解
2017/10/25 Python
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
python处理multipart/form-data的请求方法
2018/12/26 Python
python opencv 图像拼接的实现方法
2019/06/27 Python
详解python pandas 分组统计的方法
2019/07/30 Python
django 控制页面跳转的例子
2019/08/06 Python
python实现简易学生信息管理系统
2020/04/05 Python
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
德国baby-markt婴儿用品瑞士网站:baby-markt.ch
2017/06/09 全球购物
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
商场客服专员岗位职责
2014/06/13 职场文书
2014年销售经理工作总结
2014/12/01 职场文书
警告通知
2015/04/25 职场文书
小爸爸观后感
2015/06/15 职场文书
pytorch加载预训练模型与自己模型不匹配的解决方案
2021/05/13 Python
详解Redis集群搭建的三种方式
2021/05/31 Redis
MySQL 字符集 character
2022/05/04 MySQL