1.2024年基于Node.js的最佳cms内容管理系统(国内)
2.使用Sequelize快速构建PostgreSQL数据的CRUD操作详解
2024年基于Node.js的最佳cms内容管理系统(国内)
禅CMS:一款基于Express和MySQL的高质量CMS管理系统,适用于商用企业级程序开发。它具备多种类型网站开发,基于模块化和插件化开发模式,易于扩展。优点包括使用简单、postfix源码安装集成采集功能、源码简单、程序易用以及有多企业案例。缺点是时间较短。推荐程度为五颗星。官网:禅CMS内容管理系统。
DoraCMS:基于Nodejs+eggjs+mongodb编写的内容管理系统,结构简单,易于拓展,特别适合前端开发工程师做二次开发。功能齐全,具备会员模块。缺点是基于egg.js开发且长期未更新。推荐程度为四颗星。
CmsWing:一款基于Egg.js、qt源码跳转cppSequelize和GraphQL的电子商务平台及CMS建站系统,适用于PC端、手机端和微信公众平台。功能强大。缺点是并没有实现电商平台,基于落寞的框架eggjs,基于GraphQL上手使用难度较大。推荐程度为三颗星。
NoderCMS:一款轻量级内容管理系统,使用Node.js + MongoDB开发,源码培训班拥有灵活的内容模型以及完善的权限角色机制。优点是文档齐全。缺点是长期没更新。推荐程度为两颗星。
使用Sequelize快速构建PostgreSQL数据的CRUD操作详解
之前写过一个专栏《布道API》来介绍API的REST风格及推荐实践,今天开始来构建一个管理系统的API服务,首先需要处理的就是数据存储,本文将结合实际开发总结在NodeJS下使用Sequelize快速构建PostgreSQL数据的CRUD操作。项目源代码:github.com/QuintionTang/pretender-service
SequelizeSequelize是一个基于promise的Node.jsORM工具,它具有强大的如志愿APP源码事务支持、关联关系、预读和延迟加载、读取复制等功能,支持的数据库包括:PostgreSQL、MySQL、MariaDB、SQLite和MSSQL。
Sequelize类是引用sequlize模块后获取一个顶级对象,通过它来创建sequlize实例,也可以通过该对象来获取模内其它对象的smtp发信源码引用,如:Utils工具类、Transaction事务类等。创建实例后,可以通过实例来创建或定义Model(模型)、执行查询、同步数据库结构等操作。
官方网站:docs.sequelizejs.com/
添加和配置在安装模块之前,首先安装开发工具Sequelize-CLI
sudonpminstall-gsequelize-cli接下来在项目目录下安装数据存储相关的模块。
npminstallsequelize--savenpminstallpgpg-hstore--save现在在项目根目录下创建文件.sequelizerc,代码如下:
constpath=require('path');module.exports={ "config":path.resolve('./config','db.json'),"models-path":path.resolve('./models'),'seeders-path':path.resolve('./seeders'),'migrations-path':path.resolve('./migrations')};该文件将告诉Sequelize初始化,以生成config、models到特定目录。接下来,输入命令初始化Sequelize。
sequelizeinit该命令将创建config/db.json,models/index.js,migrations和seeders目录和文件。命令执行完毕之后打开并编辑config/db.json来配置数据库连接信息。
{ "development":{ "username":"dbusername","password":"dbpassword","database":"crayon-admin","host":".0.0.1","dialect":"postgres","options":{ "operatorsAliases":false},"logging":false},"test":{ "username":"dbusername","password":"dbpassword","database":"crayon-admin","host":".0.0.1","dialect":"postgres"},"production":{ "username":"dbusername","password":"dbpassword","database":"crayon-admin","host":".0.0.1","dialect":"postgres"}}目录说明:
migrations:所有迁移文件,通过sequelizedb:migrate创建相应数据表
seeders:种子文件,即初始化需要插入到数据库中的数据,运行sequelizedb:seed:all
创建Models和Migrations使用CLI工具Sequelize-CLI创建administrators表
sequelizemodel:create--nameadministrators--attributesid:integer,add_time:integer,last_login:integer,username:string,email:string,login_ip:string执行后会生成两个文件
/src/migrations/-create-administrators.js:创建数据表脚本,用于数据库初始化。
"usestrict";module.exports={ up:async(queryInterface,Sequelize)=>{ awaitqueryInterface.createTable("administrators",{ id:{ allowNull:false,autoIncrement:true,primaryKey:true,type:Sequelize.INTEGER,},add_time:{ type:Sequelize.INTEGER,},last_login:{ type:Sequelize.INTEGER,},username:{ type:Sequelize.STRING,},password:{ type:Sequelize.STRING,},email:{ type:Sequelize.STRING,},login_ip:{ type:Sequelize.STRING,},});},down:async(queryInterface,Sequelize)=>{ awaitqueryInterface.dropTable("administrators");},};/src/models/administrators.js:生成的model文件
"usestrict";const{ Model}=require("sequelize");module.exports=(sequelize,DataTypes)=>{ classadministratorsextendsModel{ }administrators.init({ id:{ type:DataTypes.INTEGER,autoIncrement:true,primaryKey:true,},add_time:DataTypes.INTEGER,last_login:DataTypes.INTEGER,username:DataTypes.STRING,password:DataTypes.STRING,email:DataTypes.STRING,login_ip:DataTypes.STRING,},{ sequelize,indexes:[{ unique:true,fields:["id"],},],freezeTableName:true,timestamps:false,//是否自动添加时间戳createAt,updateAtmodelName:"administrators",});returnadministrators;};现在执行命令:
sequelizedb:migrate执行成功后将在连接的数据库中创建数据表:administrators。
创建seedseed用于初始化插入数据,如管理员,在系统运行前需要创建一个默认账号,这些默认账号信息就写在seed文件中。
创建seed命令如下:
sequelizeseed:create--nameadministrator执行成功后将会在seeders文件夹中创建文件,修改代码如下:
npminstallsequelize--savenpminstallpgpg-hstore--save0现在将seed中的数据插入到数据库中,执行一下命令:
npminstallsequelize--savenpminstallpgpg-hstore--save1创建Services创建文件夹services,文件夹中代码封装与model交互的方法,包括所有CRUD(创建,读取,更新和删除)操作,创建administrators.js,实现的逻辑为获取账号信息、更新账号信息,代码如下:
npminstallsequelize--savenpminstallpgpg-hstore--save2创建Controllers上面创建的services文件用于控制器,在控制器文件夹中创建一个名为administrators.js的文件,代码如下:
npminstallsequelize--savenpminstallpgpg-hstore--save3创建Routers在文件夹routers中创建文件administrators.js文件,代码如下:
npminstallsequelize--savenpminstallpgpg-hstore--save4创建入口现在来为服务创建接口,项目根目录下创建文件app.js,代码如下:
npminstallsequelize--savenpminstallpgpg-hstore--save5现在执行命令nodeapp.js启动服务,将看到终端效果如下:
至此,完成一个基本的API登录服务,还有待完善,后续在迭代中完善。文章涉及的代码在GitHub上。
作者:天行无忌