微信号:QunarTL

介绍:Qunar技术沙龙是去哪儿网工程师小伙伴以及业界小伙伴们的学习交流平台.我们会分享Qunar和业界最前沿的热门技术趋势和话题;为中高端技术同学提供一个自由的技术交流和学习分享平台.

Node框架——Nomi.js

2019-02-15 10:05 孔维国

点击上方蓝字,关注我们哦!!

孔维国,2016年加入去哪儿网技术团队。目前在大住宿事业部/增值业务研发中心,参与开发了TMC、CRM、QTA、Auth等项目,负责node框架nomi的设计以及开发。乐于探索新技术,在大前端的道路上越走越偏!在node领域上越陷越深!

Nomi框架

本篇章将带大家了解,Qunar 自主研发的 Node 服务端框架 Nomi.js。 1、Nomi 是什么? 2、如何启 Nomi 服务?

Nomi是什么?

Nomi.js(node micro framework) 是基于 koa2 开发的服务端框架,是 Qunar 自主研发的 Node 框架。 Nomi 是使用 Node 开发的基于 koa2 打造的服务端框架。 Nomi 内核极其精简,具有高稳定性、模块化、与处理任务分离的特性。

Nomi解决了那些痛点?

1、每个框架都有它适合的应用场景 Nomi 被设计用来处理企业级项目的团队开发,而且 Nomi 更适合搭建微服务应用,提供 Restful API。 2、现有框架,业务代码迁移难度大 由于 Nomi 框架采用弱侵入性的设计,完全实现了对业务代码的零侵入,保证了您的业务代码与框架完美解耦,这样,您可以放心的选择拥抱或者抛弃 Nomi,而不需要承担任何风险。 3、现有框架工程化约束弱 Nomi 提供了团队开发的规范和工程化约束,促使团队项目代码结构保持高度一致。而且,Nomi 提供了团队可定制的工程化约束。您可以根据自己团队的习惯定制属于自己的工程化约束! 4、现有框架生态圈强依赖于框架环境 现有框架现状大多是,其生态圈内工具、插件、中间件等,需要依赖于框架本身提供的环境才能运行,这就需要对社区内现有的包进行二次封装,方可引入应用内使用!这无疑是对轮子的二次改造。而 Nomi 使用中间件加载器,插件加载器实现了拿来即用,不需要重新造轮子,只需要简单的配置即可使用。

5、Nomi 框架提供了一系列特性,真正实现了让开发者只关注于业务和表现。

Nomi的框架特性

1、支持多模块开发; 2、支持 RESTful API; 3、弱侵入性设计; 4、可定制的工程化约束; 5、支持 async await; 6、自定义语法糖,让您的开发变得优雅、简洁。

如何启Nomi服务

首先安装 nomi-cli 脚手架工具:

 
           
  1. npm i nomi-cli -g

构建应用:

 
           
  1. 1. nomi-cli init //初始化项目  

  2. 2. cd 工程目录执行 npm i 安装依赖包  

  3. 3. npm run build //编译

  4. 4. npm start // 启动nomi服务

接下来将以获取订单详情为例,带您体验 Nomi 开发的快乐。

编写controller

Nomi 采用 MVC 模式,那么第一步,我们将要编写的无疑是 controller 类 ,下面我们在 app/controller 目录下创建一个 OrderController.js 类。

 
           
  1. /**

  2. *  Controller 示例

  3. *  文件位置: app/controller/OrderController.js

  4. *  描述:订单controller 类 示例

  5. * /


  6. const { RequestMapping, Service } = require('nomi-router').notation;


  7. @RequestMapping({ path:"/order"})

  8. class OrderController {


  9.    @Service('service.orderService')

  10.    serviceInst


  11.    @RequestMapping({path:"/detail/{orderNum:string}", method:"get"})

  12.    async getOrderDetail(req, res, params, ctx) {

  13.        res.body = await this.serviceInst.getDetail(params.orderNum);

  14.    }


  15. }


  16. exports.OrderController = OrderController;  

编写service

controller 类我们已经创建好了,接下来在 app/OrderService 目录下创建 OrderService.js类(service类细节 详见 service类)。

 
           
  1. /**

  2. *  Service 示例

  3. *  文件位置: app/service/OrderService.js

  4. *  描述:订单service 类 示例

  5. * /


  6. const { Service } = require('nomi-router').notation;


  7. @Service("service.orderService")

  8. class OrderService {


  9.    async getDetail(orderNum){

  10.          // 调用远程过程获取响应结果 或者 使用nomi-mysql查询数据库获取结果将在稍后介绍

  11.          let result = {};

  12.        // result = await ctx.curl(`http://javaServer.com/order/detail/${orderNum}`, { dataType: 'json' });

  13.        return result.data || {orderNum};    

  14.    }

  15. }


  16. exports.OrderService = OrderService;

至此,我们可以浏览器访问 http://127.0.0.1:8080/order/detail/2 查看响应结果。

回顾

回顾一下,我们总共做了3件事情,就使整个应用跑了起来。 1、nomi-cli 脚手架构建 Nomi 应用; 2、编写 controller; 3、编写 service。 That's cool! Nomi 框架,真正做到了使开发者可以只专注于业务,不需要关心其他的问题,因为除了业务逻辑之外的事情 Nomi 都已经处理了!下面列举了《基础教程篇》所用到的 Nomi 特性。 

1、@RequestMapping 语法糖帮我们定义很方便的描述路由,处理路由中间件!(我们不需要单独编写 router 文件,或者是 router 中间件!router 规则就在 controller 的 action 注释中,维护起来很方便!) 2、@Service 语法糖帮我们注册和引用 service 类的实例!(在 action 中调用 service 方法变得如此的便捷!如:this.serviceInstance.func()) 3、获取请求参数很方便,直接从 action 的 params 中取即可,根本不用考虑是 get 还是 post 方式,因为 Nomi 框架本身已经抹平了其差异! 其实,目前为止,只窥探了 Nomi 框架的冰山一角。Nomi 团队一直致力于保证 Nomi 性能的同时,给开发者带来极致的开发体验!因为《基础教程》篇章仅仅用到了 Nomi 框架特性的一小部分,所以,更多的内容和特性建议您前往《进阶篇》,去感受 Nomi 的魅力!相信您一定会说:That`s cool!

 
Qunar技术沙龙 更多文章 Qunar技术沙龙开工啦!欢迎大家继续关注! Qunar技术沙龙给大家拜年啦! Qunar 2019-1期校招技术应届生顺利毕业啦! 深入Vuex 原理(下) 深入Vuex原理(上)
猜您喜欢 携程,请别把用户当傻冒了 Mac下全能的开源播放器SBPlayerClient 谷歌发布全新设计语言:跟苹果Swift天壤之别 亚洲唯一一个实时互联网大会,RTC 2016 ,明日开幕! 当我们谈起O2O,除了高频和刚需,还能剩下什么?