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 innerHTML、outerHTML、innerText、outerText的区别
Nov 24 Javascript
jQuery源码分析-01总体架构分析
Nov 14 Javascript
jQuery操作元素css样式的三种方法
Jun 04 Javascript
Node.js中对通用模块的封装方法
Jun 06 Javascript
JS实现的4种数字千位符格式化方法分享
Mar 02 Javascript
Javascript 字符串模板的简单实现
Feb 13 Javascript
JavaScript中的继承之类继承
May 01 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
May 23 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
Jun 04 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
Jun 08 Javascript
深入理解ES6学习笔记之块级作用域绑定
Aug 19 Javascript
JavaScript怎样在删除前添加确认弹出框?
May 27 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
dedecms防止FCK乱格式化你的代码的修改方法
2007/03/17 PHP
PHP实现动态获取函数参数的方法示例
2018/04/02 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
2019/05/06 PHP
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
2010/03/16 Javascript
jquery时间下拉框小例子
2013/04/15 Javascript
js的延迟执行问题分析
2014/06/23 Javascript
jQuery解决input超多的表单提交
2015/08/10 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
Knockoutjs 学习系列(一)ko初体验
2016/06/07 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
详解vue-cli与webpack结合如何处理静态资源
2017/09/19 Javascript
JavaScript基于遍历操作实现对象深拷贝功能示例
2019/03/05 Javascript
react+redux仿微信聊天界面
2019/06/21 Javascript
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
JavaScript/TypeScript 实现并发请求控制的示例代码
2021/01/18 Javascript
由Python运算π的值深入Python中科学计算的实现
2015/04/17 Python
酷! 程序员用Python带你玩转冲顶大会
2018/01/17 Python
TensorFLow用Saver保存和恢复变量
2018/03/10 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
2020/04/22 Python
pandas 像SQL一样使用WHERE IN查询条件说明
2020/06/05 Python
python3爬虫中多线程进行解锁操作实例
2020/11/25 Python
Python更改pip镜像源的方法示例
2020/12/01 Python
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
Shopee印度尼西亚:东南亚与台湾市场最大电商平台
2018/06/17 全球购物
违反课堂纪律检讨书
2014/01/19 职场文书
学习十八大报告感言
2014/02/04 职场文书
村干部培训班主持词
2014/03/28 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
维稳工作情况汇报
2014/10/27 职场文书
工作态度不好检讨书
2015/05/06 职场文书
2015年学校远程教育工作总结
2015/07/20 职场文书
公司保密管理制度
2015/08/04 职场文书
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android
分享CSS盒子模型隐藏的几种方式
2022/02/28 HTML / CSS