用koa开发一套内容管理系统(CMS),支持javascript和typescript双语言

栏目: Node.js · 发布时间: 6年前

内容简介:lin-cms是我们林间有风团队开源的一款CMS,它采用目前主流的前后端分离的架构,lin-cms剪彩你也可以直接查看线上的demo。

lin-cms是我们林间有风团队开源的一款CMS,它采用目前主流的前后端分离的架构, 前端 使用vue作为基础框架, 后端 选择了我们团队大量实践使用的flask作为基础框架。

lin-cms剪彩

用koa开发一套内容管理系统(CMS),支持javascript和typescript双语言
用koa开发一套内容管理系统(CMS),支持javascript和typescript双语言

你也可以直接查看线上的demo。

得益于前后端分离分离的架构,这套CMS十分灵活,市场上的CMS多是选择服务端渲染的方式,lin-cms由于是前后端分离的方式,因此你可以选择多语言的后端,和多框架的前端。

团队在开源的之初,便已推出了vue的前端版本和flask的后端版本,vue在国内可以说的上是如日中天,受众面极广。而flask在国内确实用的人太少,国内的主流服务端语言都被 javaphp 、node.js、 go 霸占。因此,在进行调研和诸多权衡后,团队选择了node.js作为第二支持语言。

选型和架构

node.js近几年发展极快,尤其是在工程化的前端,几乎已成标配。在后端方面koa与express双雄争霸,express起步早,发展成熟,生态稳定;而koa更小更轻更易学习,国内已有 egg.jsthink.js 基于koa的二次框架,显然koa更加具有吸引力。

谈到这里,有一个已经呼之欲出的问题,既然已经有egg.js这样的好框架,为什么不直接选择它了?

之所以不选择egg.js,而是直接用koa,有几个很重要的原因:

  • koa更小更轻更易学习,而我们如果选择了egg.js岂不是直接失去了这个巨大的优点。
  • egg.js已经整合了诸多生态,这些生态并不一定适合我们,或者说我们可以有更好的选择。
  • egg.js已经有插件,扩展等诸多概念,尤其是egg的插件与lin-cms中的插件大相径庭,十分不适合我们再做改变。

lin-cms-koa的整体架构如下:

用koa开发一套内容管理系统(CMS),支持javascript和typescript双语言

或者说lin-cms的后端的架构都如上图所示,接下来我们来详细阐述一下lin-cms-koa的整合之路:

typeorm
class-validator
koa-router

简单使用

lin-cms开源已有一段时间了,文档均已十分完善了,目前已有一些项目正在使用它进行开发。当然后端还是选择的flask版本,接下来我们使用lin-cms-koa来简单的使用一下lin-cms。

lin-cms前端部分使用起来非常简单,你只需要一点git基础就可以使用了,在lin-cms-vue的官方仓库中的README可以找到如下一段:

# clone the project
git clone https://github.com/TaleLin/lin-cms-vue.git && cd lin-cms-vue

# install dependency
npm install

# develop
npm run serve
复制代码

如果你通过终端成功的运行了这些命令之后,在浏览器中打开 http://localhost:8080/#/login ,你会打开前端的登陆界面。

不过这还不够,我们还需要后端部分。在浏览器中先打开 https://github.com/PedroGao/lin-cms-koa ,查看lin-cms-koa的相关信息。

当然你也可以跳过查看,直接在终端中运行如下命令:

git clone https://github.com/PedroGao/lin-cms-koa && cd lin-cms-koa
复制代码
npm install 
复制代码

接下来:

请确保你拥有 mysql 数据库和 node.js 的运行环境,并创建名为 lin-cms2 的数据库。

如果你使用 typescript 运行,那么请在 ts/app/config/secure.ts 中修改你自己的 mysql 配置。

如果你使用 javascript 运行,那么请在 js/app/config/secure.js 中修改你自己的 mysql 配置。

修改好后,请运行下面的命令,它会在数据库中添加一个超级管理员。

npx jest tests/app/dao/addSuper.test.ts
复制代码

接下来,请选择一个方式运行你的程序。

以 typescript 的方式运行

npm run start:dev
复制代码

将 typescript 编译成 javascript 的方式运行

npm run tsc:prod && npm run start:prod
复制代码

通过 javascript 的方式直接运行

node js/app/starter.js
复制代码

如果一些顺利,后端会监听本地的3000端口,然后我们再次来到lin-cms-vue的前端的文件夹下,打开 src/config/index.js 文件,修改里面的 baseUrlhttp://localhost:3000/ ,此时webpack会reload你的前端程序,如果它没有,请你再次通过

npm run serve
复制代码

来运行lin-cms-vue这个项目。浏览器再次打开 http://localhost:8080/#/login ,点击上面的登陆按钮,如果顺利,你会登陆成功进入林间有风页面。

特点

lin-cms-koa是团队在lin-cms上的又一次实现,得益于lin-cms-flask的实现,lin-cms-koa变得更加精炼和易用。lin-cms-koa目前还未进入团队的仓库进行维护,目前只放在了我个人的仓库上,待稳定后便会进入到团队仓库进行维护和发布。

lin-cms-koa分为核心库和实例工程两大部分,核心库——lin-cms-test发布在了npm上,目前还处于测试状态下,以后正式发布会改名。实例工程就是上述的项目了。

lin-cms-koa整体上使用typescript开发,也用了一些ts的特性,之所以用ts,是因为ts对于项目的开发和维护有极大的益处。不过我们也提供了js的版本,即 lin-cms-koa/js 目录,而目录 lin-cms-koa/ts 是我们的ts版本,你可以任意选择一个版本进行开发,当然目前不建议直接使用在生产环境中。

js版本的大部分代码是由ts版本编译而来的,但是考虑到二者的差异性,我们做了很多的补丁,主要是js目前不支持装饰器,而我们的参数校验使用到了装饰器,所以我们在js/app/libs/util.js中提供了 decoratePropdecorateEntify 这两个方法。

在ts中,一个简单的校验类可以这样创建:

export class BookSearchForm extends Form {
  @IsNotEmpty({ message: "必须传入搜索关键字" })
  q!: string;
}
复制代码

通过上述的两个函数做补丁,在js中它是这样的:

class BookSearchForm extends Form {}
decorateProp([
  IsNotEmpty({
    message: "必须传入搜索关键字"
  })
], String, BookSearchForm.prototype, "q");
exports.BookSearchForm = BookSearchForm;
复制代码

当然,这样的补丁也被应用在了model类上,你可以查看相关的代码。

总结

lin-cms-koa从一穷二白到今天支持双语言,也只有20天左右的时间,这20天里,它确实花去了我很多的时间。当然,它还不成熟,只能作为我的个人项目进行展示,我们团队会在后续进行诸多测试和改善,它会在不久后正式进入我们的团队仓库,并提供完善的文档。

lin-cms开源不久,我们团队一直在致力于它的发展和完善,如果你感兴趣可以查看官网进行尝试。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Computer Age Statistical Inference

Computer Age Statistical Inference

Bradley Efron、Trevor Hastie / Cambridge University Press / 2016-7-21 / USD 74.99

The twenty-first century has seen a breathtaking expansion of statistical methodology, both in scope and in influence. 'Big data', 'data science', and 'machine learning' have become familiar terms in ......一起来看看 《Computer Age Statistical Inference》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

SHA 加密
SHA 加密

SHA 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具