前言

本人不是技术专家,该笔记只是从使用语言进行开发的层面上记录一些体会,不包含也不想尝试从源码或者更深的层次去讨论语言本身的优劣。文章内容是笔者的个人感悟,既不保证正确性,也不保证别人能看懂。

这是该笔记的第三篇,用来对最近的NodeJS学习做一个小结,短期内恐怕我不会再更新它了。

第一篇在这里 NodeJS学习笔记: require, exports 和 module.exports 的初印象
第二篇在这里 NodeJS学习笔记: 简述Express的中间件multer的使用

先谈一下本次学习的收获:
1- 对于非阻塞模式的开发有了相应的意识,即从觉得很难读懂源码到现在觉得一切本该如此,这说明我的思维方式改善了。
2- NodeJS是很有趣的东西,但是暂时不适于开发商业的应用。诚然,NodeJS与Express都提供了较好的技术支持与规范的源码,但是太多来自npm的模块做不到这一点,也就是说如果不去更新依赖的资源那么可能存在未知的bug,而更新的代价则是发生各种错误。
3- 综上,我觉得angular之类的技术在相当的一段时期内更有活力,至于后端我还是暂时要回到PHP领域。哦~PHP7

引子

学习NodeJS的原因是我在尝试基于MeanJS框架的基础上进行开发,所以我要先熟悉NodeJS, ExpressJS 和 MongoDB。当时使用的MeanJS框架是0.4.2,现在已经有了0.5.beta了。其实我大约半年以前就接触过这个框架的更早期版本,大致的感觉如下:

早期版本

在前端和后端分别实现了mvc架构,不错的封装,但是使用上稍有不便。目录结构类似:

/app/modules/moduleA (比如articles)/controllers/models/services...
/public/modules... (和上面差不多,不废话了)

0.4.2

结构改善了,看起来舒服多了

/modules/moduleA (比如articles)   /client.../server.../test...

当然实际开发的时候太多的近似名称也是挺让人头疼了。

0.5.beta

前端貌似做了一些优化,后端没什么太多的变动。以前的示例代码只有oauth, users (包含头像上传), menu 和 articles,现在又增加了chat。新手其实可以fork它从而更快的入手。

正文

我觉得单独评价RESTful的话并没有什么价值,必须考虑和angularJS或者app开发结合的情况下。虽然如Mongo之类的数据库实现了RESTful接口,但是我觉得没人喜欢从浏览器端直接发起此类请求。
对于单纯的RESTful,我觉得以下就够了:

var policy = {invokeRolesPolicies: function(){},isAllowed: function(req, res, next){var thePolicy = false;if (req.model) {if (req.model.policy) {thePolicy = req.model.policy;} else {thePolicy = require('default.restful.policy.js');}thePolicy.invokeRolesPolicies();retuen thePolicy.isAllowed(req, res, next);}return next();}
};
var RESTController= {this.save = function(req, res){};this.delete= function(req, res){};this.read = function(req, res){};this.list = function(req, res){};this.loadModel = function(req, res, next, modelName){req.model = moogoose.model(modelName);next();};this.loadData = function(req, res, next, dataId){req.data = req.model.findById(dataId);next();};
}
app.route('/rest/:model').all(policy.isAllowed).get(RESTController.list).post(RESTController.save)
;
app.route('/rest/:model/:id').all(policy.isAllowed).get(RESTController.read).put(RESTController.save).delete(RESTController.delete)
;
app.param('model', RESTController.loadModel);
app.param('id', RESTController.loadData);

然后只要增加model来制定数据有效性规则和规定model对应的访问规则就可以了。

尾声

抽象RESTful框架其实是很简单的,一个针对RESTful请求的后端框架应该包括以下的部分:
1-安全验证:确认访问者的身份保证安全的访问
2-数据读写:包括数据库部分和缓存部分
3-文件处理:能够对文件上传进行处理
4-易于扩展的接口:比如socket支持,现在用来越多的地方用到了;oauth,网上支付接口等。
1和2是必不可少的。

好了,就这样,我要回去研究php了。

NodeJS学习笔记: RESTful —— 为本系列做个小结相关推荐

  1. 好程序员web前端分享Nodejs学习笔记之Stream模块

    好程序员web前端分享Nodejs学习笔记之Stream模块 一,开篇分析 流是一个抽象接口,被 Node 中的很多对象所实现.比如对一个 HTTP 服务器的请求是一个流,stdout 也是一个流.流 ...

  2. Nodejs学习笔记(七)——接口API

    [目录] Nodejs学习笔记(一)--基础之全局对象.包和npm Nodejs学习笔记(二)--模块 Nodejs学习笔记(三)--同步和与异步之文件系统模块 Nodejs学习笔记(四)--http ...

  3. Nodejs学习笔记(一)——基础之全局对象、包和npm

    [目录] Nodejs学习笔记(二)--模块 Nodejs学习笔记(三)--同步和与异步之文件系统模块 Nodejs学习笔记(四)--http协议与服务器 Nodejs学习笔记(五)--express ...

  4. 【物联网学习笔记——人人学IoT系列】一、初识物联网

    目录 1. 物联网初探 1.1 物联网(Internet of Things)早期概念定义 1.2 物联网概念发展历程 1.3 发展历史时期划分 1.3.1 概念期 1.3.2 发展期 1.3.3 成 ...

  5. 【物联网学习笔记——人人学IoT系列】三、窄带无线,海量物联

    目录 1. NB-IoT 1.1 NB-IoT背景知识 1.2 NB-IoT的网络总体架构 2. NB-IoT中的Niubility技术 2.1 NB-IoT物理层 2.1.1 NB-IoT上行技术 ...

  6. Nodejs学习笔记(六)——Mysql模块

    [目录] Nodejs学习笔记(一)--基础之全局对象.包和npm Nodejs学习笔记(二)--模块 Nodejs学习笔记(三)--同步和与异步之文件系统模块 Nodejs学习笔记(四)--http ...

  7. Nodejs学习笔记(四)——http协议与服务器

    [目录] Nodejs学习笔记(一)--基础之全局对象.包和npm Nodejs学习笔记(二)--模块 Nodejs学习笔记(三)--同步和与异步之文件系统模块 Nodejs学习笔记(五)--expr ...

  8. Nodejs学习笔记(二)——模块

    [目录] Nodejs学习笔记(一)--基础之全局对象.包和npm Nodejs学习笔记(三)--同步和与异步之文件系统模块 Nodejs学习笔记(四)--http协议与服务器 Nodejs学习笔记( ...

  9. nodejs学习笔记(上)

    nodejs学习笔记 (上) 通过学习需要做到的是 了解 前后端是如何进行交互的 nodejs也是使用javaScript进行编写的 javaScript在不同的运行环境中有不同的作用 在浏览器内核中 ...

最新文章

  1. 如何优雅的导出 Excel
  2. DCT算法的原理及实现简介
  3. name optimize is not defined 怎么解决_Web前端:怎么在JavaScript中比较对象?
  4. 计算机系学生的简单立体宿舍装潢大赏
  5. spring mvc静态资源访问的配置
  6. xubuntu沒有登錄輸入框,左上角出現白色方框,解決方案
  7. WEB 自动化测试工具 Selenium 简介及其应用
  8. 移植笔记——【MCU程序移植注意事项】
  9. metro3000 OSN2500 OSN3500 华为传输 华为光端机
  10. 如何把图片压缩到200k?怎么压缩图片大小kb?
  11. 出现数据库不给访问的情况
  12. python毕业论文开题报告_本科毕业论文开题报告怎么写-如何写毕业设计的开题报告?...
  13. 【Vim】基本操作及命令集详解
  14. 黑魔法:iOS链式编程
  15. R语言ggplot2可视化:使用patchwork包将两个ggplot2可视化结果横向构成新的结果可视化组合图(使用|符号)
  16. java播放swf文件_Java-如何在应用程序中嵌入并执行swf文件?
  17. PBR来龙去脉篇三:一些知识储备
  18. 机器学习对回归模型的评价指标:均方误差、可解释方差和R方值
  19. Python爬虫:爬取百度图片(selenium模拟登录,详细注释)
  20. 印度邦政府计划采用区块链技术减轻政府欺诈行为

热门文章

  1. 29.CSS3边框图片效果
  2. 沫沫金【实践可用】--web工程ORM数据库链接(JDBC)链接集群库||普通库,两种标准...
  3. centos yum 重新配置dns
  4. 【LeetCode】004 Median of Two Sorted Arrays 两个排序数组合并后的中位数
  5. 使用StarWind为RAC设置存储
  6. 如何在 Outlook 2003、Outlook 2007 中管理pst 文件
  7. 检测你的机子上装了什么版本的.net framework
  8. md5sum算法 —— linux或Unix上,md5sum是用来计算和校验文件报文摘要的工具程序
  9. C++ 排序函数 sort(),qsort()的用法 附加.str()用法
  10. 为什么kafka的消费者要有分组的概念