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. Android 源代码结构(转)

    简介 在使用Andriod SDK进行应用程序开发的时候,我们需要对源代码进行调试,有可能需要进入到某个Android API函数内部进行跟踪调试.但是,如果目标版本的SDK没有关联对应版本的源代码的 ...

  2. Google调试技巧总结

    工欲善其事 工欲善其事,必先利器. Google调试面板一一介绍:F12回想一下大家都应该知道,哈哈 element面板 这个面板显示了页面所有html代码.用于调试css代码.右側展示左側相应选择元 ...

  3. PHP IOS PUSH Demo

    <?php // Put your device token here (without spaces): $deviceToken = '679b466b030038bed6c3a2563c7 ...

  4. Scala课程01

    Scala课程01 简介 由于本人刚毕业,也是从事软件开发相关的工作.想再学习一下关于大数据.移动互联网.云计算相关的技术.为我的未来打好基础.并且从零开始学习大数据相关的知识,脚踏实地的走好每一步, ...

  5. c++界面设计皮肤工具

    1. 先进行软件界面设计,确定软件界面美术包装方案 2. 依据软件界面美术设计装方案制作对应的图片,图片格式请參见AUDK的帮助文档或皮肤工具SkinTool 的 Demo 3. 打开皮肤工具 Ski ...

  6. jsScript中的一些操作方法

    1.采用dom方式对script标签进行操作 var h = document.getElementsByTagName('HEAD').item(0); var s = document.creat ...

  7. 照片总结---选择适当的NoSQL

    版权声明:本文博客原创文章,博客,未经同意,不得转载.

  8. 详细解释 集成Maven Spring Mybatis项目包生成Bat文件

    有时在项目必须Maven项目包生成bat文件,长官一人.本文将解释的具体使用方法maven-assembly-plugin插件实现bat文件包. 1.首先看一下项目结构 2.配置pom.xml文件,在 ...

  9. jQuery中的 return false, e.preventDefault(), e.stopPropagation()的区别

    e.stopPropagation()阻止事件冒泡 <html><head>     <title></title>     <script sr ...

  10. 注册 集 与 删除 -- C

    文章3位设置和清除操作. #include <stdio.h> #include <stdlib.h> #include <string.h> #define BI ...