GithubHelp home page GithubHelp logo

talelin / lin-cms-koa Goto Github PK

View Code? Open in Web Editor NEW
795.0 20.0 173.0 406 KB

🌀使用Node.JS KOA构建的CMS开发框架

Home Page: http://doc.cms.talelin.com/

License: MIT License

JavaScript 93.55% PLpgSQL 6.45%
lin cms koa cmf

lin-cms-koa's Introduction


Lin-CMS-Koa

一个简单易用的CMS后端项目

flask version lin-cms version LISENCE

Lin-CMS 是林间有风团队经过大量项目实践所提炼出的一套内容管理系统框架
Lin-CMS 可以有效的帮助开发者提高 CMS 的开发效率。

简介 | 版本日志

简介

什么是 Lin CMS?

Lin-CMS 是林间有风团队经过大量项目实践所提炼出的一套内容管理系统框架。Lin-CMS 可以有效的帮助开发者提高 CMS 的开发效率。

本项目是 Lin CMS 后端的 koa 实现,需要前端?请访问前端仓库

当前最新版本

lin-cms-koa(当前示例工程):0.3.10

lin-mizar(核心库) :0.3.8

文档地址

http://doc.cms.talelin.com/

线上 demo

http://face.cms.7yue.pro/

免费入门视频教程

https://www.imooc.com/learn/1247

QQ 交流群

QQ 群号:643205479 / 814597236

微信公众号

微信搜索:林间有风

版本日志

最新版本 0.3.12

0.3.12

  1. A 新增验证码功能,默认关闭验证码
  2. U assets 目录用作本地文件上传,移到项目根目录

0.3.11

  1. F 修复消息中心 API 调用拼写错误

0.3.10

  1. A 新增消息中心扩展

0.3.9

  1. F 修复 logger 第二次模板解析错误的问题
  2. U 更新 lin-mizar 到 0.3.8

0.3.8

  1. F 修复 缺少 mysql2

0.3.7

  1. U 优化 编辑用户至少选择一个分组

0.3.6

  1. A 新增 yarn.lock
  2. U 更新 lin-mizar 到 0.3.5 版本
  3. F 修复 disableLoading 为 undefined 的问题

0.3.5

  1. U 更新核心库 lin-mizar 到 0.3.4 版本
  2. F 修复文件上传丢失 key 字段

0.3.4

  1. U 更新路由视图权限挂载的方式
  2. U HttpException 不允许直接修改 status,传入的参数由 errorCode 改为 code
  3. U 新增 code-message 配置,返回的成功码和错误码都在这里配置
  4. U 支持自定义工作目录
  5. U 更新核心库 lin-mizar 到 0.3.3 版本

0.3.3

  1. F GET /cms/user/information 返回完整的头像链接
  2. F 文件名重命名为用 - 连接,并且使用单数

0.3.2

  1. F 更改文件上传返回字段
  2. F GET admin/usersGET admin/group/all 接口过滤 root 用户
  3. F PUT /admin/user/{id} 接口不允许修改 root 用户的分组

0.3.1

  1. F 更新 lin-mizar0.3.2 版本,路由属性名由 auth --> permission

0.3.0

  1. A 将模型层抽离核心库进行重构

Lin CMS 的特点

Lin CMS 的构筑**是有其自身特点的。下面我们阐述一些 Lin 的主要特点。

Lin CMS 是一个前后端分离的 CMS 解决方案

这意味着,Lin 既提供后台的支撑,也有一套对应的前端系统,当然双端分离的好处不仅仅 在于此,我们会在后续提供NodeJSPHP版本的 Lin。如果你心仪 Lin,却又因为技术 栈的原因无法即可使用,没关系,我们会在后续提供更多的语言版本。为什么 Lin 要选择 前后端分离的单页面架构呢?

首先,传统的网站开发更多的是采用服务端渲染的方式,需用使用一种模板语言在服务端完 成页面渲染:比如 JinJa2、Jade 等。服务端渲染的好处在于可以比较好的支持 SEO,但作 为内部使用的 CMS 管理系统,SEO 并不重要。

但一个不可忽视的事实是,服务器渲染的页面到底是由前端开发者来完成,还是由服务器开 发者来完成?其实都不太合适。现在已经没有多少前端开发者是了解这些服务端模板语言的 ,而服务器开发者本身是不太擅长开发页面的。那还是分开吧,前端用最熟悉的 Vue 写 JS 和 CSS,而服务器只关注自己的 API 即可。

其次,单页面应用程序的体验本身就要好于传统网站。

框架本身已内置了 CMS 常用的功能

Lin 已经内置了 CMS 中最为常见的需求:用户管理、权限管理、日志系统等。开发者只需 要集中精力开发自己的 CMS 业务即可

Lin CMS 本身也是一套开发规范

Lin CMS 除了内置常见的功能外,还提供了一套开发规范与工具类。换句话说,开发者无需 再纠结如何验证参数?如何操作数据库?如何做全局的异常处理?API 的结构如何?前端结 构应该如何组织?这些问题 Lin CMS 已经给出了解决方案。当然,如果你不喜欢 Lin 给出 的架构,那么自己去实现自己的 CMS 架构也是可以的。但通常情况下,你确实无需再做出 架构上的改动,Lin 可以满足绝大多数中小型的 CMS 需求。

举例来说,每个 API 都需要校验客户端传递的参数。但校验的方法有很多种,不同的开发 者会有不同的构筑方案。但 Lin 提供了一套验证机制,开发者无需再纠结如何校验参数, 只需模仿 Lin 的校验方案去写自己的业务即可。

还是基于这样的一个原则:Lin CMS 只需要开发者关注自己的业务开发,它已经内置了很多 机制帮助开发者快速开发自己的业务。

基于插件的扩展

任何优秀的框架都需要考虑到扩展。而 Lin 的扩展支持是通过插件的**来设计的。当你 需要新增一个功能时,你既可以直接在 Lin 的目录下编写代码,也可以将功能以插件的形 式封装。比如,你开发了一个文章管理功能,你可以选择以插件的形式来发布,这样其他开 发者通过安装你的插件就可以使用这个功能了。毫无疑问,以插件的形式封装功能将最大化 代码的可复用性。你甚至可以把自己开发的插件发布,以提供给其他开发者使用。这种机制 相当的棒。

前端组件库支持

Lin 还将提供一套类似于 Vue Element 的前端组件库,以方便前端开发者快速开发。相比 于 Vue Element 或 iView 等成熟的组件库,Lin 所提供的组件库将针对 Lin CMS 的整体 设计风格、交互体验等作出大量的优化,使用 Lin 的组件库将更容易开发出体验更好的 CMS 系统。当然,Lin 本身不限制开发者选用任何的组件库,你完全可以根据自己的喜好/ 习惯/熟悉度,去选择任意的一个基于 Vue 的组件库,比如前面提到的 Vue Element 和 iView 等。你甚至可以混搭使用。当然,前提是这些组件库是基于 Vue 的。

完善的文档

我们将提供详尽的文档来帮助开发者使用 Lin

lin-cms-koa's People

Contributors

7insummer avatar smileshirmy avatar vanoneang avatar waterbang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lin-cms-koa's Issues

启动项目,mysql版本报错

请详细描述您对本项目的任何问题,我们会在第一时间查阅和解决。
报错字段: Client does not support authentication protocol requested by server; consider upgrading MySQL client

报错图片如下

WX20191130-233144

config.js 密码已修改成本机的

mac mysql 版本
WX20191130-233047

关于日志管理模块 出现 “{user.username}编辑了期刊内容” 的回显状态出现了 {user.username} 字符没有转化用户名root的问题。

版本:0.3.8
"name": "lin-cms-koa",
"version": "0.3.8",
今天使用koa框架搭建期刊管理的功能,发现日志提交之后,回显异常的问题:
image
看logger的源码:
image
最终在logger.js 定位问题:
image
进入解析模板的函数:
image
控制台:
image
单独把正则拿出来校验:
const REG_XP = /(?<={)[^}]*(?=})/g
var res = REG_XP.exec("{user.username}编辑了期刊内容")
var res1 = REG_XP.exec("{user.username}编辑了期刊内容")
console.log(res)
console.log(res1)
第二次返回也是 null 的情况。。
image

如何拓展lin_user表字段

我尝试在 /models/user.js 添加字段 添加后删除数据库并重启 没有期望的字段出现

const { modelExtend } = require('lin-mizar/lin/factory');
const { UserInterface } = require('lin-mizar/lin/interface');
const { User } = require('lin-mizar');
const Sequelize = require('sequelize');

modelExtend(UserInterface, {
  openid: {
    type: Sequelize.STRING(64),
    allowNull: true
  },
  testId: {
    type: Sequelize.STRING,
    defaultValue: 0
  }
});

User.prototype.sayHello = function () {
  console.log('hello world!');
};

module.exports = { User };

关于异常处理返回的error_code的命名疑问

我很喜欢目前的http状态设置,但是对于‘正确的请求201’和异常请求的body字段中,自定义的状态码键值都使用‘error_code’的设置,感觉从语义上来讲有点多此一举的感觉,根绝现在项目的规范,http的Status字段已经标明当前的请求的大致情况,为何还要在body中在重复声明这是个什么类型的自定义code。
例如:400是一个错误的请求,但返回的body中为何还要用 error_code 即为错误的状态码,两次出现错误这种就感觉重复啰嗦了,并且在内置的 Success 这个对象中也用 error_code 是不有点不妥;
建议:在HttpException中将字段code改为status,error_code改为code,这样在返回的消息中层次分明,status就能标明当前的请求是什么情况,而code也能具体到某些业务的情况,

userModel依旧无法在mysql增加字段

项目的代码是昨天克隆下来的,发现此问题依旧存在 ,mysql中的user表依旧没有openid和identifier_code字段

"dependencies": { "@koa/cors": "^2.2.3", "koa": "^2.7.0", "koa-bodyparser": "^4.2.1", "koa-mount": "^4.0.0", "koa-static": "^5.0.0", "lin-mizar": "^0.1.0-beta.4" }

modelExtend(UserInterface, { openid: { type: Sequelize.STRING(64), allowNull: false }, identifier_code: { type: Sequelize.STRING(1000), allowNull: false } });

Error: No valid exports main found for '../node_modules/koa'

今天克隆的koa模版安装并执行node index.js命令后会出现“Error: No valid exports main found for '../node_modules/koa'”。不确定是否是koa依赖的问题,我找了以前的koa包覆盖进去就会解决这个问题。

npm install 后执行node index.js出现的原始问题:
image

catch start.js 里面的run方法后的error:
image

用以前的koa包覆盖后解决问题:
image

sequelize InfoCrudMixin 提供的格式化时间有bug

描述 bug
InfoCrudMixin 提供的 create_time和update_time 的 get 方法并没有传入字段,获取到的时间永远是当前时间戳

exports.InfoCrudMixin = {
    attributes: {},
    options: {
        createdAt: 'create_time',
        updatedAt: 'update_time',
        deletedAt: 'delete_time',
        paranoid: true,
        getterMethods: {
            createTime() {
                return new Date().getTime();
            },
            updateTime() {
                return new Date().getTime();
            }
        }
    }
};

能否增加数据库文件?

工程缺少数据库文件,需要手动建立数据数据库,增加表及字段。
能否提供数据库sql文件?

API请求返回拓展后的 lin_user ,数据是经过过滤了吗?

按照文档对 user 模型进行了扩展,添加了一些别的字段,但是通过API请求数据的时候,返回的数据没有显示添加的字段。

这是 api 的代码

  async ctx => {
    const agents = await agentDto.getAgents();
    if (!agents || agents.length < 1) {
      throw new NotFound({
        msg: '没有找到相关运营商'
      });
    }
    ctx.json(agents);
  });

这是返回的数据,没有拓展后的字段

{
    "id": 3,
    "nickname": "test123",
    "admin": 1,
    "active": 1,
    "email": null,
    "avatar": null,
    "group_id": 1,
    "create_time": 1564478082000,
    "update_time": 1564478082000
}

console.log(agents)可以看到新增的字段的数据。

这是lin-cms对user表返回的数据默认进行了过滤么?
我如果想显示拓展的字段应该怎么做?

运行 node test/helper/fake-book/index.js报错

描述 bug

根据官方文档 koa入门 - 后端快手上手
image

  • 你是如何操作的?
  • 运行 node test/helper/fake-book/index.js 报错

你使用哪个版本出现该问题?

master 默认分支

  • 报错截图如下
    image

如何保证一致的代码风格

开发环境

vscode + eslint + prettier
eslint 对代码风格进行检查
prettier对代码进行格式化

问题

当对项目代码进行改动后,保存时触发vscode自动格式化代码功能,这时候vscode会使用prettier对代码进行格式化,但是格式化之后的代码不能通过项目中.eslintrc.js 配置的规则校验。
问题多是:Missing trailing commaExtra semicolonStrings must use singlequot

期望

vscode自动格式化代码后,代码能够通过eslint的校验

我所做的尝试

  • 1 修改vscode的配置,如 "prettier.singleQuote": true 但是没有效果,格式化之后还是双引号。
  • 2 修改 .eslintrc.js 使eslint的规则适应格式化之后的代码,但是这样就不能和源码保持一致的风格,这种方式最大的问题是要重新格式化原项目所有文件。

希望得到什么样的帮助

  1. 如果项目团队也同样使用了vscode的自动格式代码的功能,希望能够提供一份vscode的配置。
  2. 如果项目团队不是使用vscode的自动格式化功能,那么开发团队是如何保证一致的代码风格的?

TS 引入报错问题 lin-mizar(验证器模块)

重现步骤(可选):
mport { LinValidator, Rule } from "lin-mizar"
class RegisterValidator extends LinValidator {
id: Rule;
constructor() {
super();
this.id = new Rule("isInt", "id必须为正整数", { min: 1 });
}
}
export { RegisterValidator }

import { LinRouter } from "lin-mizar";
import { loginRequired } from "../middleware/jwt";
import { RegisterValidator } from "../validators/user.validate";
const userRouter = new LinRouter({
prefix: '/medical/data'
});
userRouter.linPost(
'name',
'/register',
{},
loginRequired,
// userLogger('管理员新建了一个用户'),
async ctx => {
let test = new RegisterValidator().validate(ctx)
console.log(test)
ctx.json({
code: 10000,
msg: '成功!'
});
}
);
export {
userRouter
};

报错行数: let test = new RegisterValidator().validate(ctx)
报错信息:
nodejs.TypeError: Class constructor LinValidator cannot be invoked without 'new'
希望能尽快解决谢谢
期望的结果是什么?
可以正常引入 使用lin-mizar的验证模块即可
自己试着解决问题总结:

  1. 继承LinValidator类之后,实例化new RegisterValidator() 就会报错, 看了源码,也没弄清, 编译环境应该也没问题, 如果需要可以提供项目代码地址以便能解决此问题,谢谢
    实际的结果是什么?

throw new Error('Dialect needs to be explicitly supplied as of v4.0.0');

请问下install lin-mizar后运行报下面的错什么原因呢?

throw new Error('Dialect needs to be explicitly supplied as of v4.0.0');
^

Error: Dialect needs to be explicitly supplied as of v4.0.0
at new Sequelize (/Users/zhongqi/Desktop/node+koa瑞商/node_modules/sequelize/lib/sequelize.js:265:13)
at Object. (/Users/zhongqi/Desktop/node+koa瑞商/node_modules/lin-mizar/lin/db.js:27:14)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Module.require (internal/modules/cjs/loader.js:690:17)
at require (internal/modules/cjs/helpers.js:25:18)
at Object. (/Users/zhongqi/Desktop/node+koa瑞商/node_modules/lin-mizar/lin/core.js:8:14)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Module.require (internal/modules/cjs/loader.js:690:17)
at require (internal/modules/cjs/helpers.js:25:18)
at Object. (/Users/zhongqi/Desktop/node+koa瑞商/node_modules/lin-mizar/lin/index.js:4:22)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)

关于文档的完善

CMS系统中,并没有实现API DOC,是否可以考虑增加这一特性,例如引入apidoc这一模块,在代码中增加相应注释,使得自动生成各类文档,以方便后续开发?
因为现阶段,项目整体还不算复杂,现在添加这一feature,工作量还不算大,而且文档齐备会对新手更加友好,谢谢。

希望新增环境变量配置

请描述一下你想怎么实现这个特性
根据不同的环境变量,满足生产、开发、测试环境不同的域名配置

关于头像路径问题

如果头像直接是 lin-cms默认的上传方式没有问题 路径也正常
但是实际情况下 图片文件是会存到专有对象存储里
我在重构 上传方法后 发现后台右上角的头像无法正常显示
排查后发现 lin-mizar 的一段代码

        avatar: {
            // 用户默认生成图像,为null
            type: sequelize_1.default.STRING({ length: 500 }),
            comment: '头像url',
            get() {
                // @ts-ignore
                return this.getDataValue('avatar') ? config_1.config.getItem('siteDomain').replace(/\/+$/, '') + '/assets/' + this.getDataValue('avatar') : null;
            }
        },

/assets/ 是写死的 这就会导致 导致及时修改了 配置siteDomain参数也不能和我们上传到对象存储的路径相对
我觉得应该删除 /assets/

按照文档执行node tests/helper/add_super.js报错

描述 bug

  • 你是如何操作的?

git clone [email protected]:TaleLin/lin-cms-koa.git
yarn
node app/starter.js

  • 发生了什么?

C:\Users\11705\Desktop\易米科技\Project\Project\官网(new)\源码\lin-cms-koa>node tests/helper/add_super.js
{ SequelizeValidationError: notNull Violation: user.username cannot be null
at Promise.all.then (C:\Users\11705\Desktop\易米科技\Project\Project\官网(new)\源码\lin-cms-koa\node_modules\sequelize\lib\instance-validator.js:74:15)
at tryCatcher (C:\Users\11705\Desktop\易米科技\Project\Project\官网(new)\源码\lin-cms-koa\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (C:\Users\11705\Desktop\易米科技\Project\Project\官网(new)\源码\lin-cms-koa\node_modules\bluebird\js\release\promise.js:547:31)
at Promise._settlePromise (C:\Users\11705\Desktop\易米科技\Project\Project\官网(new)\源码\lin-cms-koa\node_modules\bluebird\js\release\promise.js:604:18)
at Promise._settlePromise0 (C:\Users\11705\Desktop\易米科技\Project\Project\官网(new)\源码\lin-cms-koa\node_modules\bluebird\js\release\promise.js:649:10)
at Promise._settlePromises (C:\Users\11705\Desktop\易米科技\Project\Project\官网(new)\源码\lin-cms-koa\node_modules\bluebird\js\release\promise.js:729:18)
at Promise._fulfill (C:\Users\11705\Desktop\易米科技\Project\Project\官网(new)\源码\lin-cms-koa\node_modules\bluebird\js\release\promise.js:673:18)
at PromiseArray._resolve (C:\Users\11705\Desktop\易米科技\Project\Project\官网(new)\源码\lin-cms-koa\node_modules\bluebird\js\release\promise_array.js:127:19)
at PromiseArray._promiseFulfilled (C:\Users\11705\Desktop\易米科技\Project\Project\官网(new)\源码\lin-cms-koa\node_modules\bluebird\js\release\promise_array.js:145:14)
at Promise._settlePromise (C:\Users\11705\Desktop\易米科技\Project\Project\官网(new)\源码\lin-cms-koa\node_modules\bluebird\js\release\promise.js:609:26)
at Promise._settlePromise0 (C:\Users\11705\Desktop\易米科技\Project\Project\官网(new)\源码\lin-cms-koa\node_modules\bluebird\js\release\promise.js:649:10)
at Promise._settlePromises (C:\Users\11705\Desktop\易米科技\Project\Project\官网(new)\源码\lin-cms-koa\node_modules\bluebird\js\release\promise.js:729:18)
at _drainQueueStep (C:\Users\11705\Desktop\易米科技\Project\Project\官网(new)\源码\lin-cms-koa\node_modules\bluebird\js\release\async.js:93:12)
at _drainQueue (C:\Users\11705\Desktop\易米科技\Project\Project\官网(new)\源码\lin-cms-koa\node_modules\bluebird\js\release\async.js:86:9)
at Async._drainQueues (C:\Users\11705\Desktop\易米科技\Project\Project\官网(new)\源码\lin-cms-koa\node_modules\bluebird\js\release\async.js:102:5)
at Immediate.Async.drainQueues [as _onImmediate] (C:\Users\11705\Desktop\易米科技\Project\Project\官网(new)\源码\lin-cms-koa\node_modules\bluebird\js\release\async.js:15:14)
at runCallback (timers.js:705:18)
at tryOnImmediate (timers.js:676:5)
at processImmediate (timers.js:658:5)
name: 'SequelizeValidationError',
errors:
[ ValidationErrorItem {
message: 'user.username cannot be null',
type: 'notNull Violation',
path: 'username',
value: null,
origin: 'CORE',
instance: [user],
validatorKey: 'is_null',
validatorName: null,
validatorArgs: [] } ] }

你使用哪个版本出现该问题?

master

为新用户pedro添加删除图书权限报错

为新用户pedro添加删除图书权限报错
`
require("./initial");
const { db } = require("lin-mizar/lin/db");
// eslint-disable-next-line no-unused-vars
const { User, Group, Auth } = require("lin-mizar/lin");

const run = async () => {
const group = await Group.findOne({
where: {
name: "普通分组"
}
});
const user = await User.findOne({
where: {
username: "pedro"
}
});
user.group_id = group.id;
await user.save();

db.close();
};

run();
`
出现了如下错误!
Cannot convert undefined or null to object
at Function.keys

关于koa项目配置项的一些提问

关于配置路径灵活性的一些问题

在app/starter.py的文件中。采用了process.cwd()作为配置文件的baseDir。
这意味着,如果我不想改变现有项目的结构,我必须在指定文件夹路径下才能启动项目。

但是在部署的时候,制作的服务启动脚本其实并不固定,可能会有多种情况(不是在指定文件夹路径下启动脚本)。

而且在lin的源码中,也有一些process.cwd()作为baseDir的地方(读取apiDir和加载plugin的configDir)。这就直接导致了只能在指定位置启动项目。

同时:配置log文件夹的路径就没有采用这种baseDir的获取方式,我可以直接写一个绝对路径进去直接指定到我想要的位置。

同样都是配置文件,但是出现了两种不同的配置思维和风格。为了保持配置的灵活性,这些baseDir是否在版本迭代的过程中也放开维护或是采用更灵活的方式而不是直接默认执行启动脚本的路径。

按步骤安装报错,lin-mizar/lin/config

stater.js第三行:const { config } = require('lin-mizar/lin/config');
执行报错:
internal/modules/cjs/loader.js:582
throw err;
^

Error: Cannot find module 'lin-mizar/lin/config'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:580:15)
at Function.Module._load (internal/modules/cjs/loader.js:506:25)
at Module.require (internal/modules/cjs/loader.js:636:17)
at require (internal/modules/cjs/helpers.js:20:18)
at Object. (F:\wwwroot\cms\starter\app\starter.js:3:20)
at Module._compile (internal/modules/cjs/loader.js:688:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
at Module.load (internal/modules/cjs/loader.js:598:32)
at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
at Function.Module._load (internal/modules/cjs/loader.js:529:3)

关于路由URL的一个小bug

描述 bug

举个例子:我设计了一个 /v1/book/:id 接口 并用对id进行了参数校验,就是id不能为空
然后我又设计了一个 /v1/book/list 接口 接下来就报错了 用GET请求访问 也会返回错误 也提示id不能为空

lin-validator中,判断是否为async失效,导致在校验层中抛出异常没有经过中间件

在校验层中自定义校验方法,抛出异常无法被koa捕捉

  • 在校验层中定义了一个 async validateXXXX 的校验方法
    7`6I2~{4Z89Q_LF655RGGM4
  • validateXXXX抛出异常后,并没有经过koa中间件捕捉,错误直接抛出
    XI0_HCGTSRR0~ A_RVN3GEH

版本信息

  • windows10 x64
  • node.js v10.15.0 x64
  • lin-mizar 0.1.0-beta.4

错误原因
查看了 lin-mizar 源码后,发现 is-async-function 判断错误
}LY)$ 1ODSSJFLKE_L{} WM

临时解决,只用于测试
image

npm包lin-mizar报错

throw new Error('Dialect needs to be explicitly supplied as of v4.0.0');
^

Error: Dialect needs to be explicitly supplied as of v4.0.0
at new Sequelize (d:\code\node1\node_modules\sequelize\lib\sequelize.js:265:13)
at Object. (d:\code\node1\node_modules\lin-mizar\lin\db.js:27:14)

不知道sequelize 什么时候更新的。。。还是我用错了。。。

数据库无法写入日志

文件日志有,数据库无法写入日志数据,是配置哪里不对吗,还是其他原因,项目下载后也没有修改日志相关配置

文档-模型管理和权限管理中示例代码错误

描述 bug

文档原文节选:
打开fake.js文件,换成如下代码:

require("./initial");
const { db } = require("lin-mizar/lin/db");
// eslint-disable-next-line no-unused-vars
const { User, Group, Auth } = require("lin-mizar/lin");

const run = async () => {
  const group = await Group.findOne({
    where: {
      name: "普通分组"
    }
  });
  const user = await User.findOne({
    where: {
      username: "pedro"
    }
  });
  user.group_id = group.id;
  await user.save();

  db.close();
};

run();
  • 此处代码直接运行会出错

正确示例代码应该是:

require("./initial");
const { db } = require("lin-mizar/lin/db");
// eslint-disable-next-line no-unused-vars
const { User, Group, Auth } = require("lin-mizar/lin");
const { initModels } = require("./init_models")

const run = async () => {
  await initModels();
  const group = await Group.findOne({
    where: {
      name: "普通分组"
    }
  });
  const user = await User.findOne({
    where: {
      username: "pedro"
    }
  });
  user.group_id = group.id;
  await user.save();

  db.close();
};

run();
  • (增加了 initModels 的导入和调用)

你使用哪个版本出现该问题?

master 分支

数据库无法自动创建数据表

初次初始化项目,运行add_super.js后,创建了表
lin_auth
lin_file
lin_group
lin_log
lin_user
但是没有创建表 book
问题:
1、如果不存在表book,则无法运行文档中所说的fake_book.js
2、是否有配置项可配置由 Book.init 自动创建book表
3、如果有,请问在哪里

抱歉,我有一个扩展性问题想的不是很明白,请教下

lin-cms是一个分角色的权限cms管理系统,在koa中实现的原理就是中间件。在lin-cms中lin-user存储的是管理员和系统的操作员账号。那么我如果有一些使用程序前台的终端客户,比如存在myuser表中,那么如果我想为这些用户使用token令牌来验证登录,那么我是不是需要自己构建token系统,以及拓展自己的中间件来控制api的访问权限?可以直接借助lin-cms搭建好的吗?

super 身份查看用户列表出错

error_code: 999
msg: "服务器未知错误"
url: "/cms/admin/users?count=10&page=0"

super 用户没有定义group_id ,所以查询时要考虑此情况。

请问该如何得到当前操作cms的用户id(即ctx.currentUser.id)?

我发现不能直接通过下面的方法来得到currentUser
bookApi.get('/user', async ctx => { const user = ctx.currentUser; if (!user) { throw new NotFound({ msg: '没有user' }); } ctx.json(user); });
这样是得不到ctx携带的currentUser信息的,请问有什么方法能直接在路由里获得ctx携带的currentUser

上传后的图片,显示不完整

使用的接口为文档说明中的/cms/file。用postman上传图片成功后,用浏览器打开上传的图片,显示不完整。图片的尺寸没有变,图片体积变小了,显示不完整。所上传的图片尺寸为1920 * 1200,小图不会出现这种情况。

validator 的 isEmpty 和 isNotEmpty 问题

描述 bug
我用的慕课网 koa 实战课程里源码里的 lin-validator,非 NPM 下载。

this.content = [new Rule('isNotEmpty', '内容不能为空')]

lin-koa 文档示例用的是 isNotEmpty,但是会报错 validator.js 没有 isNotEmpty 方法。我查了
validator.js 文档,他们有 isEmpty,但是没有 isNotEmpty

你使用哪个版本出现该问题?
第二个问题,如何用 npm 安装 LinValidator
我看源码用 npm 安装 lin-mizar

const { LinValidator, Rule } = require('lin-mizar')

结果又报错:
Error: Dialect needs to be explicitly supplied as of v4.0.0

这要考虑super特殊情况

let sql =

已用sequelize,应多用orm,少用sql原生语句,提高可读性。

async getUsers (ctx, groupId, start, count1) {
    const { lin_user } = db.models;
    const where = {
      nickname: {
        $ne: "super"
      }
    };
    groupId && (where.group_id = groupId);
    const users = await lin_user.findAll({ where });  // 分页暂不考虑
    const { count } = await lin_user.findAndCount({ where });
    users.map(user => {
      unsets(user, ["update_time", "delete_time", "password"]);
      user.create_time = dayjs(user.create_time).unix();
      return user;
    });
    return {
      users,
      total: count
    };
  }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.