如何评价 nodejs koa与express.js 的koa框架?

很舒服的web框架:neo——推荐了解nodejs的koa的用户使用 - Golang中国
10:21 发布 1699 次点击
golang下,中间件式的web框架,之前介绍过 gin和echo的对比。
作为性能最高的两个近似框架,也拥有相同的坑爹之处:
路由不照编写排序,打乱的树形路由之间到处冲突,路由设计极不友好。
为避免冲突,rest路由只好越写越长,毫无简洁感。
同时,ehco调试信息少得可怜,路由冲突了也不报错,严重耽误时间。
而gin命名不符合一般常识,小别扭很多。比如,方法要大写:Post要写POST;路径/*key/ 解析出来带 “/“号,要自己去掉;作者还是学生,忙于青春事务;
于是,我们决定地毯式搜索,寻找一个按代码顺序解析的路由,同时命名正常舒服,像nodejs的koa那样顺手的轻量级框架。在试用了一堆框架后,还真发现了这个超舒服的框架:neo
德国人写的轻量级框架,和 nodejs 的Koa、exrpess 风格非常接近。
完善的中间件、包装有上下文、正常顺序路由、支持通配符、正常的命名方式。上手各种舒服~~
同时,作者似乎在一家从事云服务的公司,因此框架可持续发展基本可以保障了~~
目前,这个框架似乎没有任何宣传过,没什么人知道。但是,如果你也觉得gin的路由使用不便,那么neo就是紧挨在gin旁边的最佳选择。
update: 4-6楼提出的小问题已经全部修掉
butaixianran 于
21:17 修改
beego和macaron也不错啊
这个也是类koa的框架,核心实现只有100行左右代码,即简洁又优雅,逻辑又清晰,只是中间件很少,有兴趣的可以来贡献点中间件。
volatile之前有看过,核心不提供路由是非常明智的做法。
但是现在自带的router 不太舒服。居然是直接写正则,基本把人都吓跑了。
不过从neo框架的价绍来看,其作者很是粗心大意。
Now if we navigate to /static/js/script.js or /static/js/stylesheet.css we will get content of those files.
// /static/js/stylesheet.css 很明显是错误
app.Get(“/“, func(ctx neo.Ctx) (int, error) {
return 200, ctx.Res.Tpl(“index”, nil)})
// func(ctx neo.Ctx) 很明显也是错误
作者不是很认真的哈
更让人受不了的是
neo new -t template-name app-name
example:neo new -t html myappcd myappneo run main.go
请你按照去做一下,报错。根本运行不起来。(win10环境下)
需自己 再手动改一下代码才行我晕呢
只要没有流行起来的框架都有原因的,github stars 很少的,除非你很有时间,或者特别有需要,不建议尝试。
// Representing context for this request.
type Ctx struct {
// Wrapped http.Request object.
Req *Request
// Object with utility methods for writing responses to http.ResponseWriter
Res *Response
// Context data map
Data CtxData
// gorm transaction (if you need it in your application).
// If you use this Tx instance, you should start it somewhere before.
// When exception happens, neo will automatically rollback transaction, if started.
Tx *gorm.DB
// Flag to give information if Rollback method was invoked.
TxDidRollback bool
// general purpose session instance
Session Session
context就集成了gorm,耦合度不高啊
那个命令行工具的小bug已修掉。文档中的错误也改了。
代码中自带的gorm.DB已经去掉了。
neo我们的感觉是这样:99.99%都很不错,各种舒服,确实剩下了一丁点小瑕疵,但都是属于轻易就能修掉的。
关键是,作者对需求的理解是合理的,就不会有大的坑爹。
neo我们已经在用了,也在帮忙贡献。
我们连新版的文档都换了:
没有流行,是因为gin的成熟和优秀,把它盖住了。一般来说,是优先选择gin。
但gin也确实有本文提到的那些问题,而且那些都是定死了,gin根本不会去改的。
所以如果想要避开那些问题,又享受类似的优秀,neo最接近。
用tango的飘过
login.Post(“/test”, func(ctx *neo.Ctx) (int, error) {
parsed := &myType{}
err := ctx.Req.JsonBody(parsed)
if err != nil {
return 200, ctx.Res.Text(err.Error())
return 200, ctx.Res.Text(“OK”)
始终输出如下错误:&invalid character '-' in numeric literal&
后方可回复, 如果你还没有账号你可以
一个帐号。基于 Node 的下一代 Web 开发框架--koa - 简书
下载简书移动应用
写了6124字,被18人关注,获得了40个喜欢
基于 Node 的下一代 Web 开发框架--koa
由 Express 原班人马打造的 koa,致力于成为一个更小、更健壮、更富有表现力的 Web 框架。使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升常用错误处理效率。Koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手。
koa 依赖支持 generator 的 Node 环境,也就是说,node的版本要在 0.11.9 或者更高,否则将无法执行。
$ npm install koa
或者,选择安装在全局:
$ npm install -g koa
这是一个koa的简单例子:
var koa = require('koa');
var app = koa();
app.use(function *(next){
var start = new D
var ms = new Date -
console.log('%s %s - %s', this.method, this.url, ms);
// response
app.use(function *(){
this.body = 'Hello World';
app.listen(3000);
与普通的 function 不同,generator functions 以 function* 声明。以这种关键词声明的函数支持 yield。在后面会讲到 yield 的用法和意义。
执行koa时需要在 —-harmony 模式下运行,为了方便可以将 node 设置为默认启动 harmony 模式的别名:
alias node='node --harmony'
这样在执行相关js的时候就可以直接使用了。
这是一个比较抽象的概念。Koa 中间件以一种非常传统的方式级联起来,也就是这里所谓的Cascading。
在以往的 Node 开发中,频繁使用回调不太便于展示复杂的代码逻辑,在 Koa 中,我们可以写出真正具有表现力的中间件。与 Connect 实现中间件的方法相对比,Koa 的做法不是简单的将控制权依次移交给一个又一个的中间件直到程序结束,Koa 执行代码的方式有点像回形针,用户请求通过中间件,遇到 yield next 关键字时,会被传递到下一个符合请求的路由(downstream),在 yield next 捕获不到下一个中间件时,逆序返回继续执行代码(upstream)。
下边这个例子展现了使用这一特殊方法书写的 Hello World 范例:一开始,用户的请求通过 x-response-time 中间件和 logging 中间件,这两个中间件记录了一些请求细节,然后「穿过」 response 中间件一次,最终结束请求,返回 「Hello World」。
当程序运行到 yield next 时,代码流会暂停执行这个中间件的剩余代码,转而切换到下一个被定义的中间件执行代码,这样切换控制权的方式,被称为 downstream,当没有下一个中间件执行 downstream 的时候,代码将会逆序执行。
var koa = require('koa');
var app = koa();
// x-response-time
app.use(function *(next){
// (1) 进入路由
var start = new D
// (5) 再次进入 x-response-time 中间件,记录2次通过此中间件「穿越」的时间
var ms = new Date -
this.set('X-Response-Time', ms + 'ms');
// (6) 返回 this.body
app.use(function *(next){
// (2) 进入 logger 中间件
var start = new D
// (4) 再次进入 logger 中间件,记录2次通过此中间件「穿越」的时间
var ms = new Date -
console.log('%s %s - %s', this.method, this.url, ms);
// response
app.use(function *(){
// (3) 进入 response 中间件,没有捕获到下一个符合条件的中间件,传递到 upstream
this.body = 'Hello World';
app.listen(3000);
在上方的范例代码中,中间件以此被执行的顺序已经在注释中标记出来。你也可以自己尝试运行一下这个范例,并打印记录下各个环节的输出与耗时。
.middleware1 {
// (1) do some stuff
.middleware2 {
// (2) do some other stuff
.middleware3 {
// (3) NO next yield !
// this.body = 'hello world'
// (4) do some other stuff later
// (5) do some stuff lastest and return
上方的伪代码中标注了中间件的执行顺序,看起来是不是有点像 ruby 执行代码块(block)时 yield 的表现了?也许这能帮助你更好的理解 koa 运作的方式。
中间件(Middleware)
实际上,这些只是初步理解了koa基础,koa有很多第三方开发的中间件,这些中间件的熟练运用才是关键,github有很多这方面的库,每个都有详细的例子解释。以下是常用的一些:
这些天确实做了写有关koa的工作,集合开源的力量做了一个
有更详细的API说明。
在这里要感谢
对网站建设的大力贡献,还要感谢
对翻译工作的大力贡献,此中文文档遵循MIT协议,转载著名出处即可。
爱生活,爱技术。愿结识各路小伙伴。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
简书程序员大本营
投稿须知:
1.本专题仅收录与程序有关的文章。
2.请在代码框里写代码,尽量保证可看性。
关注简书官...
· 84312人关注
程序员日常,代码,教程,学习笔记,谢绝推广文,软推文,软广告,blabalabala...
· 5677人关注
if(coder&&jianshu) { print &....& };
恩,我是大括号不换行党。。。
程序员的简书
· 970人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:12973人阅读
04_JS&JQ&UI(37)
【前端神秘的面纱】
对后端开发来说,前端是神秘的,
眼花缭乱的技术,繁多的框架,
如果你还停留在前端等于只用jquery做开发,那么你out了,
本文从Java的角度简述下目前前端流行的一些框架。
水平有限,欢迎指正。
【nodejs】
对前端来说极其重要的一个“框架”,简直可以说是开天辟地
类比Java中:JVM
就前端来说nodejs具有划时代的意义,
做前端的没用过nodejs都不好意思说自己是前端,
做后端的没听过nodejs,
或者说不出nodejs和java的优缺点,也不是一个合格的后端。
nodejs不是一个js框架,千万不要认为是类似jquery的框架,
nodejs是js运行时,运行环境,类比java中jvm,
java的开端是什么,无疑是jvm,自从有了jvm,java才能吹牛说自己是“一次编写处处运行”,
不管你是windows还是linux,只要安装了对应版本的jvm都可以运行.class文件。
同样nodejs的作用和jvm的一样一样的,也是js的运行环境,不管是你是什么操作系统,
只要安装对应版本的nodejs,那你就可以用js来开发后台程序。
这具有划时代的意义,意味着一直以来只能在浏览器上玩来玩去的js,可以做后端开发了,
从有了nodejs后就催生出一大批用js做后台开发的前端人员,这部分人员就是偏前端的“全栈程序员”。
记住,nodejs是和jvm同等地位的js运行环境,打开了前端人员走向后端的道路。
【js mvc框架】
相关框架:
框架太多,详见下面两篇文章
类比Java中的:
ssh1(struts1+spring+hibernate),ssh2(struts2+spring+hibernate),ssm(springmvc+spring+mybatis)
上面说到nodejs打开了前端开发人员开发后端的大门,而且nodejs类比jvm,
那么学习java的人都知道,学习完jvm(基础)后该学什么了?
对,框架,
java中有哪些框架,正如上面所说,ssh1,ssh2,ssm等等,
这些框架都mvc框架。
既然nodej都有了,jvm出现了,那接下来就是js大神开始封装mvc框架,正如java大神开始封装mvc框架一样,
相对java流行了几种框架,nodejs对应的mvc框架就多的多了,
详见上面两篇文章,足够让你看的眼花缭乱。
其中比较有名的是expressjs。
记住,当你看到这些js框架的时候,微微一笑,原来就是写mvc框架,基于nodejs:
Sails. js,Total.js,Partial.js,Koa. js,Locomotive. js,Express. js,Flatiron. js
【js模块化】
相关概念:
commonjs,amd,cmd,umd
相关框架:
commonjs,seajs,requirejs,coolie
类比Java中的:
import,对就是import。。
如上所说,当有了nodejs(jvm),有了mvcjs(ssh)之后,
可想而知,每个mvcjs中会有多少js文件,这个时候js模块化就派上用处了,
当有人和你说js模块化如何如何,感觉自己很吊的时候,甩他一句,不就是java中的import吗?
对,虽然在前端看来js模块化如何牛x,如何吊,但是就java来说就是import。
看看下面两张图片就明白了,对比requirejs(amd)和java导包:
但是js中的模块化,还有很多规范,比如commonjs,amd,cmd,umd,感觉头大了吧,
其实简单的来说,就是commonjs是运行在nodejs端,amd,cmd,umd是运行在浏览器,
其作用就是import各种js文件,把js模块化管理,可以理解为java中的包管理,
详见这篇文章:
同样,一个mvc,js能做出来10+种框架,可想而知模块化,js也对应很多框架,
例如commonjs,requirejs,seajs等等。
记住,commonjs,requirejs,seajs等js模块化框架,遵循各种规范(amd,cmd,umd,commonjs),
类比java中的import
【reactjs】
facebook前不久出的一款框架,众前端膜拜之。
类比Java中的:freemarker的宏。
facebook前不久出了一款js框架,reactjs,
一时间,凡是用过reactjs,或者听过reactjs的前端开发就高人一等,
那么,这个框架到底是干嘛的,我们来看看官网的一个例子:
好的,看不懂没关系,我来说说,
左边是一段代码,右边是这段代码在网页中的效果,
左边代码中上面一大段是定义,最后一句话是使用,
左边代码jsx是reactjs的格式,旁边有个compiled js是jsx编译后的js,原生js。
也就是说,你通过写jsx文件,编译后生成一段js文件,这段js文件运行后是右边的效果,
那么好处是什么?
是封装,一大段js定义,最后只需要一句话输出,也就是一行js代码对应右边一个ui组件。
对了reactjs最大的作用就是用来开发ui组件,例如这个:
很酷的效果,material ui风格的webui组件,基于reactjs开发的。
做java的不知道用过freemarker没,用过freemarker的不知道用过宏没,看段代码:
----------------------------------------------
-----------------------------------------------
------------------------------------
------------------------------------
第一个图片中是freemarker用宏封装了bootstrap的button组件,
第二个图片是在代码用使用封装后的bsbutton,
第三个图片是效果
有没有发现和reactjs很相似啊,只不过reactjs是在前端实现,
而freemarker是在后端实现,两者的共同点是封装,且可以传参。
记住,facebook出品的reactjs是用来开发ui库的js框架,特点是可以封装大量代码。
更多精彩内容:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:556506次
积分:6321
积分:6321
排名:第2300名
原创:197篇
转载:14篇
评论:222条支付宝前端团队详解基于Node.js Web框架Chair -科技先生
科技先生-微信公众号:itechsir
&Chair是支付宝前端团队推出的,基于Node.js的Web框架,适用于大部分的Web应用。
本文简要介绍Chair的设计思想、功能架构和开发状况。
一、Chair的由来和设计思想
历史上,支付宝前端项目都是直接基于Java后端开发的。这种架构下,前端工程师做出网页模板(基于velocity模板引擎的vm文件),交给后端的Java引擎渲染。支付宝采用的Java引擎是名为Sofa的MVC框架。
对于前端工程师来说,这种架构有很多不方便的地方。首先,需要了解后端的实现,并且依赖开发环境中的dev服务器进行调试开发;其次,开发细节需要与后端的Java工程师沟通,交流成本相当大;最后,难以发起技术创新,因为只要涉及后端的调整,推动起来非常困难。在前端技术日新月异的今天,这已经越来越成为前端工程师心中的痛。
Chair框架就是在这种背景下诞生的,我们希望通过加入一个Node层,加速前端开发,提升研发效率,提高网站整体性能和系统的可维护性。
作为Sofa的替代,Chair直接与底层的Java服务通信,而客户端浏览器则与Chair通信,这样就不使用Sofa了。前端工程师因此可以完全不碰Java,使用熟悉的JavaScript语言,同时在浏览器和服务器两端进行快速迭代。
事实上,Chair这个名字就是来自跟Sofa的对比,因为两者都能坐人,但是椅子(Chair)比沙发(Sofa)轻多了。支付宝已经有了沙发,我们想再为它添一把椅子。
Chair为前端开发,带来了很多便利。
提高了研发效率,前端工程师直接可以改动服务器,避免了与Java后端不必要的沟通成本。
更清晰的职责划分,前端针对表现层(View)开发,后端针对业务和数据(Controller和Model)开发。
更好的?程化,前端自己就能完成单元测试、集成测试和自动发布。
节省人工,同样的组件(比如模板和路由)只需要写一次,不用再为浏览器和服务器各写一遍了。
预期的性能提升,Node作为服务器端时,有很强的HTTP请求处理能力。
目前,Chair已经投入了生产环境,与Sofa各自支持着不同的支付宝Web应用。预计不远的将来,会出现更多基于Chair的Web应用。
二、Chair的结构
Chair的基础代码,是基于Koa框架的再开发,使用的语言是下一代JavaScript&&ECMAScript 6,模板引擎是Nunjucks,但也可选用其他引擎。同时兼容Velocity模板,现有绝?部分模板?件?需修改也能正常渲染。
整个框架从浏览器到服务器,一共分成五层:
路由层(routers):适配不同路径的HTTP请求
中间件层(middlewares):加工HTTP请求
控制器层(controllers):部署业务逻辑
服务层(services):提供内部的统一API,供不同业务调用
代理层(proxy):负责与Java服务通信,提供统一格式的数据
除了模板引擎以外,Chair还部署了一些功能组件,比如mock(数据模拟)和logger(日志器)。
Chair根据业务实际需求和现有架构高度定制。虽然从结构上看,Chair可以提供完整的后端功能,但目前主要用于模板渲染和路由。真正的业务逻辑和数据处理,还是要交给后端的Java服务。
三、性能提升
Node的加入,为很多功能提供了很大的性能改进。根据压测的结果,使用Chair(下图的web)比使用原来的方案(下图的portal),响应时间和系统负载能力至少提高一倍以上。
四、Chair的开发进度
12月上旬,Chair发布了0.5版。除了修正Bug,这一版主要添加了以下功能。
支持 cookie session, 不依赖 tair
支持连接 MySQL数据库
支持mvc stat 和 rpc stat 日志统计
支持统一导航 uninav 模板
页面数据模拟 pagemock
目前,Chair正处于密集开发之中,预计明年上半年发布1.0.0版。
该文章来自阿里巴巴技术协会(ATA)精选集
作者:兔哥
官方微信公众号: itechsir我用的一些Node.js开发工具、开发包、框架等总结
1.WebStorm,毫无疑问非他莫属,跨平台,强大的代码提示,支持Nodejs调试,此外还支持vi编辑模式,这点我很喜欢。
2.做些小型项目用Sublime Text。
3.Browserify:将你的nodejs模块应用到浏览器中
4.nvm:nodejs版本管理工具,你可能会用到多个nodejs版本(如v0.11.x支持generator的nodejs和stable的v0.10.x版本),用它可以方便切换
测试&自动化
1.mocha:一个简单、灵活有趣的 JavaScript 测试框架(类似的还有should,supretest)
2.gruntjs:迄今为止node世界中最流行的构建工具
3.gulp.js:宣称取代gruntjs的东东
4.node-inspector:nodejs代码调试神奇,结合浏览器Chrome-Debug,轻量,方便
5.node-dev:代码改了,还在不断的按Ctrl+C吗?快试试这个工具吧,使用fs.watch()监控项目目录,代码变化后,自动重启项目
6.pm2:替代node-forever的新秀
第三方开发包
1.Edge.js:让.NET和nodejs在同一进程中运行,相互调用(神器的东西啊)
2.Express,优秀的Web开发框架
3.moment,强大的日期处理库
4.cheerio,jQuery核心选择器的实现,可跑在server端,类似jsdom,但比jsdom轻量很多
5.async,异步处理
6.shortid,url友好的unique id
7.log4js,日志记录,稳健的系统离不开日志记录
8.colors,便于在console中输出不同颜色的文本(tinycolor,更轻量级的控制台颜色设置)
9.xmlrpc,方便xml远程过程调用,比如写metaweblog的时候可能会用到
10.commander:编写命令行应用必备,简化各种命令解析操作
11.koa:Express的接班人
12.chokidar:完善的文件、文件夹监控包,解决了fs.watch诸多不完善的地方,可以进行子目录的监控,相当方便
13.axon:消息、常见socket模式的上层实现,简化socket开发,TJ大神作品
14.cron:采用crontab语法的任务计划包
15.open:使用本地应用打开文件或者url
16.term-list:cli辅助选择操作
17.deepmerge: js对象深度合并
18.loadsh,underscore:js常用工具库,对象合并,排序算法,map,reduce等
19.iconv-lite:纯js实现的编码转换库,开发爬虫等场景会经常用到。
20.request: 更简单的发送http请求
21.needle:轻量级的http client模块,集成了iconv-lite,跟request类似
22.superagent:类似request,使用风格跟jQuery神似。
23.mobile-agent: 判断是手机浏览器的访问还是pc端的访问,对做web很有用哦。
24.is-type-of:js辅助库,判断对象的类型
Web框架&工具
1.StrongLoop
2.KeystoneJS
3.CompoundJS
如果您喜欢本文请分享给您的好友,谢谢!
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)

我要回帖

更多关于 nodejs koa安装 的文章

 

随机推荐