Hello Kraken.js!

kraken.js是由PayPal开源的快速开发工具,旨在简化基于Express.js框架的应用开发流程。创建一个kraken项目只需三步:安装必备工具、创建项目和运行项目。kraken提供灵活的配置、约定的开发方式、自定义中间件支持,并且通过约定自动匹配相应的配置文件。此外,它还支持根据NODE_ENV环境自动调整配置。

<p>&#160;</p> <h2>前言</h2> <p>kraken.js 由paypal 公司开源的一个用于快速开发基于Express.js框架应用的快速开发工具, 因为kraken 并没有在Express.js基础上更改多少东西,只是在原来的express基础上补充了一些约定开发的规则, 让开发根据便捷.</p> <h2>你好,世界!</h2> <p>要创建一个kraken 项目只需要非常简单的三步走:</p> <ol> <li> <p>安装必备工具</p> <blockquote> <p>Linux or Mac <br /><code>sudo npm install -g generator-kraken</code> <br />Windows <br /><code>npm install -g generator-kraken</code></p> </blockquote> </li> <li> <p>创建kraken项目 <br />只需要一行代码,然后,看着提示语,输入一些东西,一个项目就这样创建完毕.</p> <blockquote> <p><code>yo kraken</code></p> </blockquote> </li> <li> <p>运行kraken项目 <br />还是只需要一行代码</p> <blockquote> <p><code>npm start</code></p> </blockquote> </li> </ol> <p>以上三行代码即可,完成一个kraken项目的创建了.</p> <h3>注意事项:</h3> <ol> <li> <p><code>yo kraken</code> 你输入项目名字的时候,会在当前项目创建与该项目名字一样的文件夹,记得<code>cd</code> 进去文件夹再去运行 <code>npm start</code></p> </li> <li> <p>注意<code>NODE_ENV</code>的设置,kraken的配置是会根据当前<code>NODE_ENV</code>进行变化,所以如果跑不通的时候最好检查一下当前的<code>NODE_ENV</code>.默认情况下,<code>NODE_ENV</code>没有设置或者设置了<code>development</code>,启动的时候,<code>kraken</code> 会默认加载<code>./public/templates</code> 下的模板,设置了其他值的时候,就会去加载<code>./.build/templates</code> 而这个当你在<code>kraken</code> 项目目录下运行<code>grunt build</code> 就会出现<code>.build</code> 该目录了用于部署在<code>NODE_ENV</code>设置为<code>production</code>或者其他值的时候加载.</p> </li> </ol> <p>查看你当前系统的<code>NODE_ENV</code>环境</p> <blockquote> <p>Linux or Mac</p> <blockquote> <p><code>echo $NODE_ENV</code></p> </blockquote> <p>Windows</p> <blockquote> <p><code>echo %NODE_ENV%</code></p> </blockquote> </blockquote> <h2>约定开发</h2> <p>个人看法 <code>kraken</code> 与其说是一个框架好不如说它只不过提供了灵活,方便的用于构建Express应用的方式.</p> <h3>配置(/config)</h3> <p><code>kraken</code> 在 <code>./config</code> 约定了两类配置文件:</p> <ol> <li><code>app.json</code> 用于配置,host, port, i18n ,express 等. </li> <li><code>middleware</code> 用于对默认中间件的配置,目前支持的中间件有<code>appsec</code>, <code>compiler</code>, <code>session</code>, <code>errorPages</code>, <code>static</code>, 详细的参数配置请阅读官方文档,这里就不赘述了. </li> </ol> <p>除此以外,<code>kraken</code> 还约定支持根据<code>NODE_ENV</code>自动匹配相应的配置文件,规则是:</p> <blockquote> <p><code>app-NODE_ENV.json</code></p> </blockquote> <p>例如, 当前<code>NODE_ENV</code>是<code>development</code>, 你在目录下有一个<code>app-development.json</code>的文件话,就会优先读取该文件的配置.</p> <h3>控制器(/controllers)</h3> <h3>路由控制</h3> <p><code>kraken</code> 默认会自动加载<code>./controllers</code> 下的文件,进行路由控制,个人觉得,这个真心省心.接下来的写法,与express 完全一样!</p> <pre><code class="js" data-origin="&lt;pre&gt;&lt;code class=&quot;js&quot;&gt;module.exports = function (server) {&#10; server.get(&#39;/customer&#39;, function (req, res) {&#10; res.send(&#39;Hello World&#39;);&#10; });&#10;};&#10;&lt;/code&gt;&lt;/pre&gt;">module.exports = <span class="function"><span class="keyword">function</span> <span class="params">(server)</span> {</span> server.get(<span class="string">'/customer'</span>, <span class="function"><span class="keyword">function</span> <span class="params">(req, res)</span> {</span> res.send(<span class="string">'Hello World'</span>); }); }; </code></pre>

<p>如果,你是express的开发者,就会越感发现,<code>kraken</code>更多的是补充了express不足的地方,除此以外跟平常用express开发毫无区别.</p>

<h3>自定义中间件 和 周期控制</h3>

<p><code>kraken</code> 将一个请求的周期定义为三级:</p>

<ol> <li><code>app.requestStar</code> 请求开始 </li>

<li><code>app.requestBeforeRoute</code> 进行路由前 </li>

<li><code>app.requestAfterRoute</code> 路由后输出 </li> </ol>

<p>整个实现异常简洁, 有兴趣的可以去阅读源码:</p>

<blockquote> <p><code>appcore.js</code> <code>line: 172 - 198</code></p> </blockquote>

<p>定义一个中间件的方法与express的时候一样,只不过,现在多了一步,我们要把中间件放到哪个位置而已</p>

<p>约定在<code>./middleware/lib</code> 下建一个文件,beforeRouteMiddleware.js</p>

<pre><code class="js" data-origin="&lt;pre&gt;&lt;code class=&quot;js&quot;&gt;module.exports = function () {_&#10; var reqCounts = 0;&#10; return function (req, res, next) {&#10; req.counts = reqCounts | 0;&#10; reqCounts++;&#10; next();&#10; };&#10;};&#10;&lt;/code&gt;&lt;/pre&gt;">module.exports = <span class="function"><span class="keyword">function</span> <span class="params">()</span> {</span>_ <span class="keyword">var</span> reqCounts = <span class="number">0</span>; <span class="keyword">return</span> <span class="function"><span class="keyword">function</span> <span class="params">(req, res, next)</span> {</span> req.counts = reqCounts | <span class="number">0</span>; reqCounts++; next(); }; }; </code></pre>

<p>然后在: index.js</p>

<pre><code class="js" data-origin="&lt;pre&gt;&lt;code class=&quot;js&quot;&gt;var beforeRouteMiddleware = require(&#39;./lib/middleware/beforeRouteMiddleware&#39;)&#10;&#10;app.requestBeforeRoute = function requestBeforeRoute(server) {&#10; server.use(beforeRouteMiddleware());&#10;};&#10;&lt;/code&gt;&lt;/pre&gt;"><span class="keyword">var</span> beforeRouteMiddleware = require(<span class="string">'./lib/middleware/beforeRouteMiddleware'</span>) app.requestBeforeRoute = <span class="function"><span class="keyword">function</span> <span class="title">requestBeforeRoute</span><span class="params">(server)</span> {</span> server.use(beforeRouteMiddleware()); }; </code></pre>

<p>与express的中间件功能一样,每请求一次,都会触发中间件. 与原生的express不同<code>krarken</code>提供了更有条例的中间件定义约定.</p>

<h2>总结</h2>

<p><code>kraken</code> 还有一些比较实用的功能,例如安全,还有本地化,不过这些内容,官方文档已经写得很详细了,这里就不作过多的说明. 在我看来,<code>kraken</code> 只干了一件事,就是把express条理化了,<code>kraken</code>并没有对express进行更多的封装,所以,只要会express的入手<code>kraken</code> 就像喝水一样简单. 而<code>kraken</code> 提供的约定,能够更有效率的开发Node.js的web项目.</p>

转载于:https://my.oschina.net/youxiachai/blog/180523

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值