zerojs! 造出最好的 CMS 轮子

zerojs是一个基于nodejs、angularjs、git的CMS。在它之上可以继续开发出博客、论坛、wiki等类似的内容管理型系统。

  • 拥抱开发者和社区
    • 层次清晰,高度解耦。前后端即使分开也都是完全可独立运行的系统。
    • 每一个层次都是用当前业界最流行的工具和方法作为底层,对开发者来说几乎无学习成本。
    • 模块、主题、套件体系简单成熟,二次开发没有坑。

后端架构

zerojs 底层基于 sails。继承了 sails 三大优势:

  • 强大的 Model 层。sails实现了自己的ORM,接口几乎和 mongoose 完全一致,简单易用。配合上社区统一的数据库驱动,可完美支持mongo、mysql、redis、postgreSQL等等数据库。ORM封装完善,设置可以对单个model指定使用的数据库。
  • 为model提供全自动的RESTful接口。实现声明即可用。
  • controller 和 view 完全基于express实现,无附加学习成本。

zerojs 的核心层包含了CMS最通用的功能,特点有三:

  • 内容管理功能强大。zerojs为"内容节点","分类与标签"等核心概念建立了统一的抽象,为继承者统一提供索引、摘要等功能。同时系统仍然非常开放,允许开发者声明普通的model,然后通过mixin的方式使用部分功能。
  • 系统可扩展性高。几乎在每个流程的关键动作处都使用了hook来支持扩展。例如“增、删、改、查”的前前后后。同时在系统操作(例如记录统计数据)处都采用了选择driver的方式来支持适合开发者的需求。
  • 对前端前无古人的友好。原生支持传统模板渲染、前端MVVM框架渲染及混合渲染等多种方式。系统默认提供一整套angular模块(包括登陆、注册、节点增删改查等)给开发者随意组合使用,可实现几乎 0 代码的情况下将前端变成单页应用。工程化问题(如静态资源的压缩打包)由系统自动根据当前环境完成。

zerojs 的扩展层基于git实现,优势:

  • 代码安全有保障,不会搞挂系统。
  • 一键即可在当前开发环境打包自己开发的新功能。无需手动整理。

以下是一个基于zerojs打造的博客系统基础模块示意图:

前端架构

前面已经提到 zerojs 对前端提供的全部都是标准的 REST 接口,并且在 view 的渲染上支持多种方式。意味着前端完全可以自主开发,甚至完全抛弃掉服务器端的view层,不在同一环境也可以。这里讲的前端架构,主要是指zerojs默认提供的angular的前端架构。下面分三个前端最关心的问题来讲:

一、如何使用默认前模块?

zerojs 为"用户、节点、标签、统计"等每一个主要功能都提供了一整套完善的angular模块,并且都有默认的controller。很多时候,例如新增一种节点类型如“日记”,开发者需要做的仅仅是非常简单的三步:

  1. 在后端声明一下这个类型。
  2. 前端引入文件,
  3. 然后写前端的模板文件就够了。

即使要增加字段,都只要写模板就够了。默认模块已经经过了各种场景的锤炼,功能非常完善。如果你真是遇到非常特别,一定要自己手动处理的地方,那你仍然可以大量复用默认模块的service、filter等等。几乎所有功能都被封装到了service里。 非常值得注意的时,这些默认模块和zerojs的后端没有任何耦合!这意味着即使你要完全换成自己的后端,只要接口标准,那么这些模块也都是可用的。

二、如何处理预加载的数据?

在做单页应用的时候,常常为了节省请求、加速第一屏显示速度而把让服务器端提前把一些数据直接渲染在页面上,例如"当前用户的基本信息","第一屏数据"等。zerojs在处理view的时候,遇到"渲染单个节点"、"渲染节点列表"都会默认将节点内容直接渲染到页面上,在angular中,引入系统默认提供的preload模块即可获取到这些数据。不过仍然不用太操心,系统提供的节点增删改查、列表渲染、单个节点渲染等默认angular模块都已经自动支持使用preload数据了。开发者还是只要正常写模板就好。

三、前端脚本的模块依赖、打包压缩等如何处理?

这些问题都是工程问题,zerojs在生产环境会分析模板然后统一打包再注入到模板中。未来在view层可能会推出CDN模块,对前端更友好!

下面是一个基于zerojs打造的博客系统,当然,毫不客气地说要成为博客中的王者。

http://www.cnblogs.com/sskyy/p/3918299.html

造出最好的 CMS 轮子的更多相关文章

  1. zerojs! 造出最好的 CMS 轮子

    zerojs是一个基于nodejs.angularjs.git的CMS.在它之上可以继续开发出博客.论坛.wiki等类似的内容管理型系统. 拥抱开发者和社区 层次清晰,高度解耦.前后端即使分开也都是完 ...

  2. 使用Python管理数据库

    使用Python管理数据库   这篇文章的主题是如何使用Python语言管理数据库,简化日常运维中频繁的.重复度高的任务,为DBA们腾出更多时间来完成更重要的工作.文章本身只提供一种思路,写的不是很全 ...

  3. Lucene.net 的性能探究--Lucene.net 的并发处理能力到底有多强?

    这篇博客并不是证明Lucene.net的性能有多强悍,实际上Lucene.net的并发能力并不让人很满意,这得看你怎么用它. 因为Lucene 本身就是一个搜索引擎的基础框架,相当于一辆车子的发动机, ...

  4. 开发自己的山寨Android注解框架

    目录 开发自己的山寨Android注解框架 开发自己的山寨Android注解框架 参考 Github黄油刀 Overview 在上一章我们学习了Java的注解(Annotation),但是我想大家可能 ...

  5. PHP-PSR 现代PHPer的开发规范

    PSR是PHP Standards Recommendation的简称,意为PHP推荐标准.要想了解PSR,首先得知道制定这一标准的人/组织是谁————PHP-FIG. PHP-FIG PHP-FIG ...

  6. Hadoop就是一个别人造好的轮子

    这个想法源自于我看了<Hadoop: The Definitive Guide>的Part I Ch 2中MapReduce的引入和介绍,书中先说了怎么通过原始的办法处理数据,然后引入到如 ...

  7. 用Vue自己造个组件轮子,以及实践背后带来的思考

    前言 首先,向大家说声抱歉.由于之前的井底之蛙,误认为Vue.js还远没有覆盖到二三线城市的互联网小厂里.现在我错了,从我司的前端技术选型之路便可见端倪.以太原为例,已经有不少公司陆续开始采用Vue. ...

  8. 如何合理封装你的轮子、飞机、大炮(以封装OkHttp为例)

    前言 对于程序员来说,很多时候,我们都在造房子,从学会框架或者是学会构建整个项目之后,慢慢的我们就会觉得自己在做的事情是一种重复劳动,很多时候只不过是换个面孔而已.而更快的造房子,造好看的房子可能是进 ...

  9. 除非你是BAT,前端开发中最好少造轮子

    站在前人的肩膀上 HTML.CSS.JavaScript是前端的根基,这是无可否认的事实.正如一辆车当然都是由一堆钢板和螺钉组成的,但是现在还有人拎着个锤子敲敲打打的造车吗?李书福说过,“汽车不过是四 ...

随机推荐

  1. php形式的内容被处理

    /** * 过滤HTML内容RETURN * * @param $string * @param bool $html * * @return array|string */ public stati ...

  2. 【leetcode】Clone Graph(python)

    类似于二叉树的三种遍历,我们能够基于遍历的模板做非常多额外的事情,图的两种遍历,深度和广度模板相同也能够做非常多额外的事情,这里举例利用深度优先遍历的模板来进行复制,深度优先中,我们先訪问第一个结点, ...

  3. js isArray小结

    原文:[转载]js isArray小结 在日常开发中,我们经常需要判断某个对象是否是数组类型的,在js中检测对象类型的常见的方法有几种: 1.typeof操作符.对于Function.String.N ...

  4. android 登录推断是否邮箱或手机号

    /** * 验证邮件是合法的输入 *  * @param strEmail * @return */ public static boolean isEmail(String strEmail) { ...

  5. VS2010-使用“预先生成事件命令行”和“后期生成事件命令行”功能

    原文:VS2010-使用"预先生成事件命令行"和"后期生成事件命令行"功能 xcopy /r /y $(TargetPath) $(ProjectDir)..\ ...

  6. oracle_安装_win7+64位+Oracle+11g+64位下使用PLSQL+Developer+的解决办法

    1)安装Oracle 11g 64位 2)安装32位的Oracle客户端( instantclient-basic-win32-11.2.0.1.0) 下载instantclient-basic-wi ...

  7. 算法题C#

    几个大公司(IBM.MicroSoft and so on)面试经典数据结构与算法题C#解答 1.链表反转 我想到了两种比较简单的方法 第一种是需要开一个新的链表,将原链表的元素从后到前的插入到新链表 ...

  8. api接口对于客户端的身份认证方式以及安全措施

    转载 基于http协议的api接口对于客户端的身份认证方式以及安全措施 由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的jsession ...

  9. APMServ—我用过的最优秀的PHP集成环境工具

    原文:APMServ-我用过的最优秀的PHP集成环境工具 经常折腾wordpress和各种cms,免不了要在本地测试一些程序,所以选择一款好的php集成环境就至关重要啦. 1. 我用过的php集成环境 ...

  10. Redis 3.0集群搭建/配置/FAQ

    ·声明 1,已官网中文教程为基础,边看边学,结合环境现状搭建. 2,哥对Ruby不热爱.不熟悉.不感冒,所述内容如有疑义请谅解. 3,3.0官说集群还在测试中,其实用用也还算马马虎虎,对外集群API真 ...