授权协议 MIT
开发语言 TypeScript
操作系统 跨平台
软件类型 开源软件
所属分类 Web应用开发Web框架
开源组织
地区 国产
投 递 者 fieldyang
适用人群 未知
收录时间 2020-07-22

软件简介

Noomi一个基于node的企业级框架,基于typescript开发,支持路由、过滤器、IoC、Aop、事务及嵌套、安全框架、缓存、集群。Noomi全面支持typescript,提供快捷简单的注解编写方式和丰富的配置处理能力。

核心模块

主要包括以下部分:

路由

路由作为web服务器与浏览器交互的桥梁,把js方法以RESTful方式暴露给客户端(浏览器)。

@Router()
class Clazz1{
    @Route('/path')
    method1(){
        ...
    }
    ...
}

过滤器

过滤器为路由进行过滤,可针对不同的路由,设置不同的过滤方法,对路由及请求参数进行预处理。

class Clazz1{
    @WebFilter(path,priority)
    do(request,resonpse){
        ...
        return true/false;
    }
}

IoC

IoC(依赖注入)在需要依赖某个实例时,由注入器进行注入,不需要进行new操作。
所有实例通过实例工厂统一管理,便于实例重用,降低实例创建和释放的消耗。
@Instance注解表示该类所创建的实例由实例工厂进行管理。
@Inject注解表示把实例工厂中该实例名对应的实例注入到成员变量中。

@Instance('instance1')
class Clazz1{
    @Inject('instance2')
    relInstance:Clazz2;
    method1(){
        this.relInstance.***
        ...
    }
}

Aop

把业务无关代码独立出来,做成切面,然后把切面包裹到业务代码上,通常应用场景为日志、事务等。

@Aspect()
class Clazz1{
    @Pointcut(["test1.*","test2.*"])
    testPointcut(){}
    @Before("testPointcut()")
    method1(){
        ...
    }
    @After("testPointcut()")
    method2(){
        ...
    }
    @Around("testPointcut()")
    method3(){
        ...
    }
    @AfterThrow("testPointcut()")
    method4(){
        ...
    }
    @AfterReturn("testPointcut()")
    method5(args){
        ...
    }

事务

事务主要针对数据库操作,事务操作可以在业务代码中编写,这样用有两个缺点:

  1. 事务代码与业务代码无关;
  2. 如果一个事务方法调用了多个事务方法,当非第一个方法出现异常时,则会导致事务回滚错误。

实际开发中,我们不建议在业务代码中写事务相关代码,建议使用noomi事务,noomi支持事务及嵌套事务。

@Transactioner()
class Clazz1{
    @Transactional()
    async method1(){
        ...
    }
    ...
}

缓存

noomi提供了NCache类,可以提供内存和redis缓存统一处理,使用方便。

const cache = new NCache({
    name:'***',
    saveType:0/1,
    max_size:2000000,
    redis:'default'
});

集群

NCache支持redis缓存,web缓存和session都作为NCache的实例存在,所以可直接存放在redis上,从而实现多核和多机集群,我们建议采用PM2实现集群部署。

安全

noomi提供内置安全框架,用户只需提供对应的数据表和配置相应参数即可实现资源访问鉴权。

{
    "save_type":1,
    "redis":"default",
    "expressions":["/*"],       
    "dboption":{},
    "auth_fail_url":"***",    
    "login_url":"***"         
}
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表于软件架构专区
2019/11/18 23:20

noomi发布了

noomi终于发布了,网址: 1. https://github.com/noomijs/noomi 2. https://gitee.com/fieldyang/noomi.git 写noomi的最初想法,大概在2018年底,一直听说node的非阻塞很不错,就想去试试,结果发现多年用spring那一套做javaee,到了node有点不知道怎么下手,然后看了node最流行的express和koa,发现它们都是web框架,后来又看了egg和nest,它们又用了koa和express。想想算了,为啥不自己做一个呢,可以把我熟悉的那套javaee的东...

0
0
发表于软件架构专区
2019/11/21 22:24

noomi-cli上架了

noomi 客户端命令工具,可一键生成项目结构,网址:https://www.npmjs.com/package/noomi-cli

0
0
2019/11/21 16:34

noomi和nest性能对比

# 测试描述 测试内容为路由、实例、注入、数据库配合在一起的性能测试,所有功能和处理流程相同,路由复杂度、注入数量也相同。不同的是noomi用sequelize-typescript,nest用typeorm。 # 测试环境 + 配置:Intel® Core™ i7-8550U CPU @ 1.80GHZ 1.99GHz + 内存:16GB + Node.js版本:v10.14.1 + 工具:jmeter5.1.1 # 测试方式 使用nest.js和noomi.js进行相同操作: 从mysql数据库获取单表数据通过路由显示到页面为json格式,mys...

0
0
发表于开发技能专区
2019/11/19 22:18

noomi开发那些事儿- sequelize-typescript models加载问题

noomi用ts开发,接入sequelize当然选择ts版了(还好它出了ts版,否则我要考虑是不是以typeorm接入),因为noomi需要在初始配置文件noomi.json中配置database项,所以model需要以目录方式接入,这个字符串官方文档没有详细描述,官方写了两种: 1. 目录方式: models:[__dirname + '/models']; 2. 通配符文件方式:models:[__dirname + '/**/*.model.ts'] addModels方法就不再这里赘述了。 给人的引导就是匹配model的ts文件所在路...

0
0
发表于服务端专区
2019/11/25 11:42

整合全家桶 noomi+nodom

noomi抽空加一些新功能,多一些测试。回到nodom,结合noomi做服务器预编译,增加服务器渲染功能,咱来一个全家桶,开发者更轻松一些。

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
4 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部