原文地址:https://adonis-china.org/posts/2前端
用Laravel也有些時日了,各類代碼生成工具,各類Eloquent關聯操做,各類微信、支付插件,再配合Larvel-admin擴展寫後臺簡直爽到飛起。但總以爲PHP+Javascript還不夠優雅,因此最近折騰了一下AdonisJs - 一個NodeJs版的Laravel。node
其實好久以前也嘗試過MEAN和Sails,但因爲Laravel的思想根深蒂固,老是對她們提不起興趣。並且NodeJs的市場本就魚龍混雜,每一個框架都有本身的思想,因此一直在尋找Laravel的Node實現,因而就和AdonisJs結下了不解之緣。ios
相比PHP,在全棧開發方面NodeJs有自然優點web
都是用npm
安裝擴展,與前端編程語言統一(廢話)數據庫
有些庫先後端均可以用(如:axios、underscore)npm
環境更簡單:一臺新機器下個NodeJs,設置個淘寶鏡像就OK了,其餘不少命令行工具均可以用npm裝編程
「天下大勢,合久必分,分久必合」,因此發現趨勢很重要axios
PC和移動端瀏覽器從最初的百花齊放到如今webkit一家獨大windows
移動APP在不少場景已經被混合模式APP統一,如今幾乎很難見到一款徹底原生不帶H5的APP了後端
NW.js的沒落和Electron的興起再次讓js在桌面端站穩腳跟
連桌面端Linux都幾乎被Ubuntu統一了
JavaScript能作服務端、WEB端、桌面端和APP客戶端,但世界上最好的PHP卻力不從心。
和Laravel徹底一致的思路,從邏輯上和代碼上均可以從Laravel平滑遷移。這對之後的擴展、插件等周邊完善很是重要!
相比MEAN、Express、Koa等框架來講,AdonisJs是一整套解決方案,不會有東拼西湊的感受。並且流程清晰,思路規範,更適合小規模企業級開發。
相比meteor、sailsJs等其餘真正的「全棧」框架來說,AdonisJs相似VueJs同樣是漸進式的。自由度高,入門更簡單,在現有的狀況下遷移成本更低。
代碼生成、ORM、路由、JWT、WebSocket都很方便。
安裝
npm i -g adonis-cli adonis new blog --skip-install cd blog cnpm install npm run serve:dev
就這樣,你的第一個adonisjs項目就啓動起來了,瀏覽器訪問一下看看
額,這是我本身發明的一個詞。我以爲MVC模式里路由也很重要,因此就本身加了個R。
app/Http/routes.js
裏面的路由跟Laravel幾乎同樣。支持直接寫邏輯和指向一個Controller的方法
須要注意的是不支持參數的注入;若是是渲染視圖,須要加個yield
const Route = use('Route') Route.get('users/:id', function * (request, response) { const id = request.param('id') response.send(`耶, 我獲得了一個動態ID: ${id}`) }) Route.group('version1', function () { Route.get('users', function * (request, response) { // ... }) }).prefix('api/v1') Route .get('users/:id', 'UserController.show') .as('profile') Route.get('about', function * (request, response) { yield response.sendView('about') })
能夠用相似Laravel的artisan的一個命令 ace
,windows上須要用node ace
./ace make:controller Home # 或 ./ace make:controller User --resource
UserController:
const User = use('App/Model/User') class UsersController { * index (request, response) { const users = yield User.all() yield response.sendView('users', { users: users.toJSON() }) } }
仍是和Laravel很像,須要注意的是AdonisJs裏面有個use
方法用來模擬PHP的use
,用於導入各類包和模型等等。Controller的方法要用生成器方法,幾乎全部的數據庫查詢都要用yield
,像上面說的,渲染視圖也要用yield
。
命令生成視圖:
./ace make:view welcome # create: resources/views/welcome.njk
模板語法用的相似twig的nunjuncks,和Laravel的blade也很像
{% if user.age %} You are {{ user.age }} years old. {% endif %}
你須要在你的編輯器/IDE裏面安裝nunjucks模板的語法高亮插件. 若是你的編輯器沒有nunjucks模板語法高亮插件, 你可使用twig模板高亮插件代替.
建立模型
./ace make:model User # 或者直接生成遷移文件,-m也行 ./ace make:model User --migration
生成的樣子:
app/Model/User.js 'use strict' const Lucid = use('Lucid') class User extends Lucid { }
關鍵在於關聯:
class Book extends Lucid { chapters () { return this.hasMany('App/Model/Chapter') } }
學過Laravel的能夠無腦嘗試了。不過目前只支持到多對多的belongsToMany
,還不支持Laravel Eloquent的 多態關聯
趕忙去試試吧,有任何問題均可以直接回復。