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 相关文章推荐
服务器安全设置的几个注册表设置
Jul 28 Javascript
JQuery获取各种宽度、高度(format函数)实例
Mar 04 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
Jun 23 Javascript
jQuery解析Json实例详解
Nov 24 Javascript
jQuery插件echarts去掉垂直网格线用法示例
Mar 03 Javascript
详解使用Typescript开发node.js项目(简单的环境配置)
Oct 09 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
Mar 28 Javascript
vue click.stop阻止点击事件继续传播的方法
Sep 04 Javascript
微信小程序实现图片上传
May 23 Javascript
Vuex的各个模块封装的实现
Jun 05 Javascript
vue实现顶部菜单栏
Nov 08 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
Nov 26 Vue.js
用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
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
2012/01/10 PHP
php的declare控制符和ticks教程(附示例)
2014/03/21 PHP
php实现购物车功能(上)
2020/07/23 PHP
Yii2简单实现给表单添加验证码的方法
2016/07/18 PHP
PHP实现对xml的增删改查操作案例分析
2017/05/19 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
js 判断 enter 事件
2009/02/12 Javascript
javascript CSS画图之基础篇
2009/07/29 Javascript
JavaScript判断访问的来源是手机还是电脑,用的哪种浏览器
2013/12/12 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
2017/03/14 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
JS ES6中setTimeout函数的执行上下文示例
2017/04/27 Javascript
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
vue中选项卡点击切换且能滑动切换功能的实现代码
2018/11/25 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
js实现电灯开关效果
2021/01/19 Javascript
python自动翻译实现方法
2016/05/28 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
使用Python操作FTP实现上传和下载的方法
2019/04/01 Python
python Elasticsearch索引建立和数据的上传详解
2019/08/04 Python
Python实现随机取一个矩阵数组的某几行
2019/11/26 Python
python调用摄像头的示例代码
2020/09/28 Python
Python之Sklearn使用入门教程
2021/02/19 Python
Html5实现首页动态视频背景的示例代码
2019/09/25 HTML / CSS
财务经理的岗位职责
2013/12/17 职场文书
大学同学聚会邀请函
2014/01/19 职场文书
生育关怀行动实施方案
2014/03/26 职场文书
员工家属慰问信
2015/03/24 职场文书
业务员管理制度范本
2015/08/06 职场文书
springcloud整合seata
2022/05/20 Java/Android
Windows11 Insider Preview Build 25206今日发布 更新内容汇总
2022/09/23 数码科技