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

zerojs! 造出最好的 CMS 轮子,布布扣,bubuko.com

时间: 2024-08-24 02:09:42

zerojs! 造出最好的 CMS 轮子的相关文章

cocos2d-x模型加载的重构,我眼中的面向对象

这两天在写cocos2d-x加载ogre的mesh模型的东西,完成了一半了,还差动画文件没接进来.这篇文章并不是教如何加载模型文件的,因为那种东西没什么可教的,无非就是加载文件,然后解析出自己想要的顶点.关键帧等数据,最后给coco2d-x中的MeshData赋好值.这里我想表达一些我有关代码格式.代码设计.代码重构的想法,我会分一些有关或者无关的问题,来逐一分析. 一.为什么要支持多种模型格式?cocos2d-x自己定义一种新的格式c3d.c3t这样好不好? 首先,我认为,一个成熟的游戏引擎不

设计模式-学习随笔(一)

Ps:类似原文. 有一款游戏,内容是鸭子的生活,你可以扮演一只鸭子,游泳.呱呱叫还可以鸭子式的起飞.游戏内部设计里,有一个祖类(Superclass),囊括了鸭子的基本生活行为,不同的鸭子种类只需要继承再重写abstract方法,就可以衍生出唐老鸭.周黑鸭之类拥有自己特色的鸭子,UML建模如下: 游戏很受欢迎(强行受欢迎),于是要进行下一版本的开发,要添加让鸭子飞行的功能!!!这有啥难的,在祖类(Superclass)中添加一个fly方法,所有通过继承派生出来的鸭子不就能飞了么,于是bulabu

写代码的指导思想:如何写出易测、清晰、健壮的牢固代码

背景 写出 BUG 不算糟糕,给人埋坑,让别人写出 BUG ,耗时耗力才更令人讨厌.要想不写出 BUG, 不埋坑,需要用心写出 "易测.清晰.健壮" 的牢固的代码.95% 的代码,能做到这一点,就可以保证几乎无问题了:3%的代码能做到"可复用.可扩展",善莫大焉! 本文结合之前的经历和案例,探讨如何写出"易测.清晰.健壮"的代码. 代码三性 代码的基本标准是:易测.清晰.健壮. 易测 易测,是说代码容易测试.写代码的第一思想是:不要对代码过于自信

君子生非异也,善假于物也

前几天周六的时候,公司组织了团建活动. 租了一辆中巴车到景区,大家集中在公司楼下上车.其中一个人不小心迟到了(在此还是建议大家不要迟到,要多守时哈),最终我们决定先走. 然后人事小姑凉和师傅商量,是否可以到指定的地点,让那名迟到的同事打车和我们汇合,我们接上他,然后再去目标地点. 师傅说可以,然后说了,从三环下来的地方的xxx路,哪儿有个酒店啥的.可以在哪儿等下. 因为大家都不熟悉,所以人事小姑凉突然不知道怎么处理了,又是搜索地图,又是问人地点在哪儿. 我看她实在不知道如何处理,就说,你让那名同

不造个轮子,你还真以为你会写代码了?

作者:茄果链接:https://zhuanlan.zhihu.com/p/24435564来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 最近在琢磨Vue的实现原理,参照着Vue捣鼓了一个轮子,一个轻量的前端MVVM框架,Vue的绑定指令基本都实现了一遍.轮子姑且叫vueuv.js吧,GitHub:qieguo2016/Vueuv,欢迎围观上星星~~ MVVM原理实现非常巧妙,真心佩服作者的构思:编译部分没用源码的方式实现,自己捣鼓着实现的,过程真是既烧脑也获益良

程序员为什么热衷造轮子

搜索一下"造轮子"或者"程序员为什么喜欢造轮子",会看到很多相关的讨论,这是个老生常谈的话题,很多人谈过了,谈了很多年.不过还是有再谈的必要. "造轮子"的含义: 明知道你做的不可能比前辈做得更好,却仍然坚持要做. 就软件开发而言,"造轮子"是指,"业界已经有公认的软件或者库了,却还坚持要自己做". 在软件开发过程中,有时你想造轮子老板却极力反对,有时你不想造轮子老板却坚持要造一个出来,为什么会有这种两极状

BigInteger in Cpp (造轮子大法第一波) 未完成版本

游荡知乎这么久,甚是仰慕V神.遂开始造轮子之路,由于新手实力较菜.顾从简单的大整数的入门. 功能实现分析: 1. 能用字符串, 长整型(long long or _int64)构造出此BigInteger. 2. 具有正负数之分(整这个整了好一会) 3. 实现基本运算                                    (c,d,e)尚未实现 a 加    b 减 c 乘    d 除 e 取余 4.输入,输出运算符的重载 类整体架构如下. 1 class BigInt { 2

程序员为什么热衷造轮子?

搜索一下“造轮子”或者“程序员为什么喜欢造轮子”,会看到很多相关的讨论,这是个老生常谈的话题,很多人谈过了,谈了很多年.不过还是有再谈的必要. “造轮子”的含义: 明知道你做的不可能比前辈做得更好,却仍然坚持要做. 就软件开发而言,“造轮子”是指,“业界已经有公认的软件或者库了,却还坚持要自己做”. 在软件开发过程中,有时你想造轮子老板却极力反对,有时你不想造轮子老板却坚持要造一个出来,为什么会有这种两极状况? 这篇文章就来讨论“造轮子”这件事,包括下列主题: 程序员为什么会重复造轮子 为什么有

CMS垃圾回收机制

详解CMS垃圾回收机制 原创不易,未经允许,不得转载~~~ 什么是CMS? Concurrent Mark Sweep. 看名字就知道,CMS是一款并发.使用标记-清除算法的gc. CMS是针对老年代进行回收的GC. CMS有什么用? CMS以获取最小停顿时间为目的. 在一些对响应时间有很高要求的应用或网站中,用户程序不能有长时间的停顿,CMS 可以用于此场景. CMS如何执行?  总体来说CMS的执行过程可以分为以下几个阶段: 3.1 初始标记(STW) 3.2 并发标记 3.3 并发预清理