详解用Node.js实现Restful风格webservice


Posted in Javascript onSeptember 29, 2017

Restful风格的WebService正在渐渐取代传统的SOAP, Java 也有很多Restful的框架,很方便简洁,Jersey,restlet,甚至SpringMVC也可以,不得不说Rest让人从Web转型到WebService更容易和方便,当然深入Restful的理论还是发现比较复杂的,但是,开发和理论并不需要那么的贴合,有时候伪Restful更直观,靠谱些。

但是,作为很帅的Node.js怎么可以不和同样帅气的Restful相结合呢!?对于我们这种无视理论的开发者来说,Restful不就是url的规范+HTTP method的规范而已嘛,所以Node这种很自由的技术来说,同样实现restful变的非常正常。不需要什么框架,但是我还是用了Express,Express只是对原生的http模块的一层封装而已,不要那么计较嘛!

Java曾经是一个Xml配置文件横行的世界,现在是各种Annotation(注解)乱入的世界,虽然注解的侵入性比较小,但是加了一摞注解的类也让人伤神,尤其是各框架混杂的注解,好在各大框架还是比较自觉的,各种负责不同的层,所以还不会导致各种注解的混乱。好了,那么下面欢迎来到,没有注解,也没用xml的世界:

----我是例子---------

var express = require('express') //加载模块 
var app = express() //实例化之 
 
var map = {"1":{id:1,name:"test"},"2":{id:2,name:"test"}} //定义一个集合资源,key为字符串完全是模仿java MAP<T,E>,否则谁会这么去写个hash啊! 
 
app.get('/devices',function(req, res){ //Restful Get方法,查找整个集合资源 
  res.set({'Content-Type':'text/json','Encodeing':'utf8'}); 
  res.send(map) 
}) 
app.get('/devices/:id',function(req, res){ //Restful Get方法,查找一个单一资源 
  res.set({'Content-Type':'text/json','Encodeing':'utf8'}); 
  res.send(map[req.param('id')]) 
  //console.log(req.param('id')) 
}) 
app.post('/devices/', express.bodyParser(), function(req, res){ //Restful Post方法,创建一个单一资源 
  res.set({'Content-Type':'text/json','Encodeing':'utf8'}); 
  map[req.body.id] = req.body 
  res.send({status:"success",url:"/devices/"+req.body.id}) //id 一般由数据库产生 
}) 
app.put('/devices/:id', express.bodyParser(), function(req, res){ //Restful Put方法,更新一个单一资源 
  res.set({'Content-Type':'text/json','Encodeing':'utf8'}); 
  map[req.body.id] = req.body 
  res.send({status:"success",url:"/devices/"+req.param('id'),device:req.body}); 
}) 
app.delete('/devices/:id',function(req, res){ //Restful Delete方法,删除一个单一资源 
  res.set({'Content-Type':'text/json','Encodeing':'utf8'}); 
  delete map[req.param('id')] 
  res.send({status:"success",url:"/devices/"+req.param('id')}) 
  console.log(map) 
}) 
app.listen(8888); //监听8888端口,没办法,总不好抢了tomcat的8080吧!

---------我是测试-----------

详解用Node.js实现Restful风格webservice

用Postman测试ok, 代码中唯一让人诧异的应该是delete map[req.param('id')],我们知道js的map是一个Object,或者Object是一个map,,delete object.property,可以删除这个属性,但是delete Object[Property]也可以把这个属性给干掉,delete o.x 也可以写作 delete o["x"],两者效果相同 关于delete请观看:ECMAScript delete!

系不系很方便哈!和那些XXX框架些的代码很类似啊!如果你是一个寻求不同的人,Node.js当然也满足你,一直备受争议的路由表上场了:

------我是另一个文件:routes.js--------

{ get:  
  [ { path: '/', 
    method: 'get', 
    callbacks: [Object], 
    keys: [], 
    regexp: /^\/\/?$/i }, 
  { path: '/user/:id', 
    method: 'get', 
    callbacks: [Object], 
    keys: [{ name: 'id', optional: false }], 
    regexp: /^\/user\/(?:([^\/]+?))\/?$/i } ], 
delete:  
  [ { path: '/user/:id', 
    method: 'delete', 
    callbacks: [Object], 
    keys: [Object], 
    regexp: /^\/user\/(?:([^\/]+?))\/?$/i } ] }

定义这么一个对象,然后

var routes = require('./routes') 
app.use(app.router);//保留原来的 
routes(app);//这个是新加的,将前者作为默认路由

关于routes的更多内容:Express官网   靠谱些,毕竟node.js最大的问题,就是资料的api都太旧了!

Node.js处理请求包括其它一些Io都是异步的,很快,所以对于性能,我是比较看好的,关于Ab测试的结果,还在测,总之我希望可以秒杀tomcat!(不是集群哦!)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
获取表单控件原始(初始)值的方法
Aug 21 Javascript
Jquery遍历checkbox获取选中项value值的方法
Feb 13 Javascript
javascript获取系统当前时间的方法
Nov 19 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
May 04 Javascript
深入浅析JavaScript中的scrollTop
Jul 11 Javascript
js给table赋值的实例代码
Oct 13 Javascript
jQuery中的select操作详解
Nov 29 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
Jun 29 Javascript
微信小程序图片选择区域裁剪实现方法
Dec 02 Javascript
vue如何引入sass全局变量
Jun 28 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
Sep 16 Javascript
详解javascript中的Error对象
Apr 25 Javascript
实现一个完整的Node.js RESTful API的示例
Sep 29 #Javascript
jquery鼠标悬停导航下划线滑出效果
Sep 29 #jQuery
vue axios同步请求解决方案
Sep 29 #Javascript
IntersectionObserver实现图片懒加载的示例
Sep 29 #Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
Sep 29 #Javascript
jQuery选择器之子元素过滤选择器
Sep 28 #jQuery
微信禁止下拉查看URL的处理方法
Sep 28 #Javascript
You might like
如何删除多级目录
2006/10/09 PHP
php垃圾代码优化操作代码
2010/08/05 PHP
比较全面的PHP数组的使用方法小结
2010/09/23 PHP
基于PHP微信红包的算法探讨
2016/07/21 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
js小技巧--自动隐藏红叉叉
2007/08/13 Javascript
JavaScript中null与undefined分析
2009/07/25 Javascript
jquery validate poshytip 自定义样式
2012/11/26 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
12种不宜使用的Javascript语法整理
2013/11/04 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
javascript中字符串拼接详解
2014/09/26 Javascript
使用script的src实现跨域和类似ajax效果
2014/11/10 Javascript
express的中间件cookieParser详解
2014/12/04 Javascript
纯javascript实现自动发送邮件
2015/10/21 Javascript
seajs学习教程之基础篇
2016/10/20 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
详解webpack中的hash、chunkhash、contenthash区别
2018/01/05 Javascript
koa-router源码学习小结
2018/09/07 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
JS canvas实现画板和签字板功能
2021/02/23 Javascript
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
2015/05/20 Python
python定时利用QQ邮件发送天气预报的实例
2017/11/17 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
2019/06/21 Python
python输入错误后删除的方法
2019/10/12 Python
django inspectdb 操作已有数据库数据的使用步骤
2021/02/07 Python
培训讲师邀请函
2014/01/10 职场文书
淘宝网店营销策划书
2014/01/11 职场文书
同学会邀请书大全
2014/01/12 职场文书
股东出资证明书(正规版)
2014/09/24 职场文书
走进毛泽东观后感
2015/06/04 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书
2019年特色火锅店的创业计划书模板
2019/08/28 职场文书