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 EasyUI API 中文文档 - Panel面板
Sep 30 Javascript
JQuery对class属性的操作实现按钮开关效果
Oct 11 Javascript
详解JavaScript中的forEach()方法的使用
Jun 08 Javascript
深入理解JavaScript中的浮点数
May 18 Javascript
关于json字符串与实体之间的严格验证代码
Nov 10 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
Nov 22 Javascript
JS实现滑动门效果的方法详解
Dec 19 Javascript
jQuery元素选择器实例代码
Feb 06 Javascript
vue2组件实现懒加载浅析
Mar 29 Javascript
关于angularJs清除浏览器缓存的方法
Nov 28 Javascript
javascript实现Emrips反质数枚举的示例代码
Dec 06 Javascript
详解一些适用于Node.js的命名约定
Dec 08 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文件操作详解
2016/12/30 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
2017/02/23 PHP
PHP连接MySQL数据库操作代码实例解析
2020/07/11 PHP
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
2011/09/27 Javascript
JS中for循序中延迟加载动态效果的具体实现
2013/08/18 Javascript
html+js实现动态显示本地时间
2013/09/21 Javascript
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
分享十五款 jQuery 社交网络分享插件
2015/05/16 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
2016/05/21 Javascript
Bootstrap源码解读标签、徽章、缩略图和警示框(8)
2016/12/26 Javascript
微信小程序实践之动态控制组件的显示/隐藏功能
2018/07/18 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
Vue配置marked链接添加target="_blank"的方法
2019/07/19 Javascript
vue实现百度搜索功能
2020/12/28 Javascript
vue实现简单瀑布流布局
2020/05/28 Javascript
python 二分查找和快速排序实例详解
2017/10/13 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
利用python制作拼图小游戏的全过程
2020/12/04 Python
美国葡萄酒网上商店:Martha Stewart Wine Co.
2019/03/17 全球购物
先进工作者获奖感言
2014/02/08 职场文书
进步之星获奖感言
2014/02/22 职场文书
有限责任公司股东合作协议书
2014/12/02 职场文书
初中家长评语和期望
2014/12/26 职场文书
论文答辩开场白大全
2015/05/27 职场文书
使用feign服务调用添加Header参数
2021/06/23 Java/Android
php实现自动生成验证码的实例讲解
2021/11/17 PHP
Python os和os.path模块详情
2022/04/02 Python
如何优化vue打包文件过大
2022/04/13 Vue.js
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python