使用 Daze.js 开发 Node 应用 - 介绍篇
发布于 1 个月前 作者 czewail 1875 次浏览 来自 分享

什么是 Daze.js

Daze.js 是一款 Node.js 服务端 Web 开发框架,底层基于 IOC 容器模式实现,使用装饰器进行依赖注入,结合 AOP 模式编程

由于使用装饰器进行依赖注入,所以依赖 Babel 生态

特性

  • 基于 IOC 容器模式设计,模块深度解耦
  • 支持 AOP 编程,对业务逻辑的各个部分进行隔离
  • 路由去中心化,通过注入实现路由定义,提升阅读质量
  • 内置多种组件类型,应对复杂场景
  • 支持自定义提供者,具备高扩展能力
  • 自动加载组件自动分类注册,自动化体验极佳
  • 更多…

目标

做最好的开发体验

Example

const { Controller, Route, Http } = require('@dazejs/framework')

[@Route](/user/Route)('/superman')
class Superman extends Controller {
  @Http.Get('/create')
  create() {
    return this.response().Created()
  }
}

上面的示例是一个控制器的代码,使用 @Route 装饰器表示这是一个路由控制器,并且路由前缀为 /superman, 控制器继承了基础控制器 Controller, 表示这是一个控制器模块,使用 Http.Get 装饰器开放 /superman/create 访问路径,我们可以使用 GET /superman/create 访问该资源,使用 this.response().Created() 创建状态码为 201 Created 的响应

目录结构

.
├── dist                        // 打包目标目录
├── logs                        // 日志目录
├── package.json
├── public                      // 静态资源目录
├── src                         // 源码目录
│   ├── app                     // 应用目录
│   │   ├── controller          // 控制器目录(推荐)
│   │   ├── middleware          // 中间件目录(推荐)
│   │   ├── service             // 服务类目录(推荐)
│   │   ├── resource            // API 资源目录(推荐)
│   │   ├── component           // 通用组件目录(推荐)
│   │   ├── validator           // 验证器目录(推荐)
│   ├── config                  // 应用配置目录
│   └── index.js                // 应用入口文件
└── views                       // 视图文件目录

src/app 下的目录结构可自行定义

控制器

路由参数

路由参数框架已经通过控制器方法自动注入, 我们可以通过定义路由参数的顺序来获取

const { Controller, Route, Http } = require('@dazejs/framework')

[@Route](/user/Route)('/superman')
class Superman extends Controller {
  @Http.Get('/create/:name/:driver')
  create(name, driver) {
   return { name, driver }
  }
}

当我们访问 /superman/create/xiaoming/lily, 我们就可以通过参数直接获取 namedriver

请求

控制器中,可以直接通过控制器实例获取请求实例

const { Controller, Route, Http } = require('@dazejs/framework')

[@Route](/user/Route)('/superman')
class Superman extends Controller {
  @Http.Get('/create')
  create() {
    const name = this.request.getParam('name')
    return name
  }
}

在上述例子中,如果我们访问 /superman/create?name=xxx, 我们就可以通过 this.request.getParam('name') 获取到 name 的值:xxx

响应

大部分情况我们只需要在控制器直接 return 数据即可返回结果,框架另外还支持返回资源实例,视图实例,响应实例等

这里我们先介绍下响应实例,可以直接通过控制器方法属性 this.response(data, code, headers) 创建响应实例:

const { Controller, Route, Http } = require('@dazejs/framework')

[@Route](/user/Route)('/superman')
class Superman extends Controller {
  @Http.Get('/create')
  create() {
    return this.response('data', 200, {
      'conetent-type': 'application/json'
    })
  }
}

响应实例还提供了更多有用的方法,具体可以查看官方文档(文章最后会有)

更多功能

Daze.js 目前刚发布 1.0 版本,功能已经很多,一篇文章介绍不完,大家可以期待后续的文章或者关注项目了解更多,还有更多的功能迭代计划

后续还有更多深入介绍使用方法和原理的文章

这仅仅是开源的第一步

功能计划

  • websocket
  • granphQL
  • Dubbo
  • DB
  • ORM
  • 更多 …

大家有更多的想法可以去 issue 提出: https://github.com/dazejs/daze/issues/1

传送门:

官网:https://dazejs.org

项目地址: [https://github.com/dazejs/daze](

3 回复

你和 nest, 我投你一票, 虽然我都没用过

直接基于 ts 写会舒服很多~ 类型提示很方便。 node.js 官方的 llhttp 也用ts 了。 yarn2 也是ts 重构了~

个人觉得 node 异步调用aop没有java那么好使

回到顶部