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 相关文章推荐
JavaScript.The.Good.Parts阅读笔记(二)作用域&闭包&减缓全局空间污染
Nov 16 Javascript
Jquery实现控件的隐藏和显示实例
Feb 08 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
Feb 13 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
Mar 26 Javascript
js实现表单检测及表单提示的方法
Aug 14 Javascript
原生JS实现圣旨卷轴展开效果
Mar 06 Javascript
基于VUE.JS的移动端框架Mint UI的使用
Oct 11 Javascript
基于JavaScript实现简单的音频播放功能
Jan 07 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
Mar 03 Javascript
Vue2.0生命周期的理解
Aug 20 Javascript
搭建一个Koa后端项目脚手架的方法步骤
May 30 Javascript
Node.js 中判断一个文件是否存在
Aug 24 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
一个ubbcode的函数,速度很快.
2006/10/09 PHP
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
php一句话cmdshell新型 (非一句话木马)
2009/04/18 PHP
PHP mkdir()无写权限的问题解决方法
2014/06/19 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
PHP中使用curl伪造IP的简单方法
2015/08/07 PHP
php实现的redis缓存类定义与使用方法示例
2017/08/09 PHP
PHP+mysql防止SQL注入的方法小结
2019/04/27 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
2020/02/10 PHP
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
不使用script导入js文件的几种方法
2016/10/27 Javascript
H5实现中奖记录逐行滚动切换效果
2017/03/13 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
基于AngularJS实现表单验证功能
2017/07/28 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
2017/09/10 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
对于防止按钮重复点击的尝试详解
2019/04/22 Javascript
Nodejs在局域网配置https访问的实现方法
2020/10/17 NodeJs
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
[01:14]DOTA2亚洲邀请赛小组赛赛前花絮
2017/03/27 DOTA
python通过字典dict判断指定键值是否存在的方法
2015/03/21 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
2017/04/18 Python
python实现图像识别功能
2018/01/29 Python
pandas的to_datetime时间转换使用及学习心得
2019/08/11 Python
关于tf.matmul() 和tf.multiply() 的区别说明
2020/06/18 Python
韩国著名的在线综合购物网站:Akmall
2016/08/07 全球购物
苹果香港官方商城:Apple香港
2016/09/14 全球购物
Amcal中文官网:澳洲综合性连锁药房
2019/03/28 全球购物
化学学院毕业生自荐信范文
2013/12/17 职场文书
幼儿园中秋节活动方案2013
2014/01/29 职场文书
党员党性分析材料
2014/02/17 职场文书
三方股份合作协议书
2014/10/13 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
Python insert() / append() 用法 Leetcode实战演示
2021/03/31 Python