Laravel構文を使用したNodeJSフレームワーク(およびコードに麺がない)

驚いたことにHabrを駆け抜けたとき、このフレームワークはいくつかのダイジェストでしか言及されていないことに気付きましたが、私の意見ではもっと注目に値します。 以下は多くのコードとそれに関するコメントはほとんどありません。 そしてはい、友達! これはHabrに関する私の最初の記事であり、強くてsc​​られないようにという要求です。


私たちの多くは、短い時間でLaravelに慣れました。その優雅なスタイル、コンソールの職人、Eloquent ORM、ミドルウェア、プロバイダーなど。 Adonis JSフレームワークの作成者であり、私たちがlaravelを愛しているすべてのことをNodeJSだけで完全に繰り返していると思いました。 よく見てみましょう:


アプリケーション構造


├── app │ ├── Commands │ ├── Http │ ├── Listeners │ ├── Model ├── bootstrap ├── config ├── database │ ├── migrations │ └── seeds ├── providers ├── public ├── resources │ └── views ├── storage 

サポートされているデータベース



移行およびコンソールユーティリティAce(職人)


 #   ./ace make:migration users --create=users # database/migrations/1464437815620_users.js 

移行コード

 'use strict' const Schema = use('Schema') class UsersSchema extends Schema { up () { this.create('users', (table) => { table.increments() table.string('email').unique() table.timestamps() }) } down () { this.drop('users') } } module.exports = UsersSchema 

いくつかのエースコマンド


 #  ./ace migration:run #  ./ace migration:status #    ./ace migration:rollback #     ./ace migration:refresh 

いくつかの興味深い観察


AdonisJSのインストールは十分に高速であり、最終的にはわずかなコマンドになります。 インストール後、すぐに移行を展開できます。デフォルトでは、フレームワークはデータベースフォルダーにSQLiteファイルを作成します。


ルーティング


 const Route = use('Route') const User = use('App/Model/User') Route.get('/', function * (request, response) { const users = yield User.all() response.json(users) }) Route.get('users', 'UsersController.index') 

データベース


AdonisJSでのデータベースの操作は、Laravel 5と同じくらい美しいです。 セッター、モデルイベントをリッスンできるデータベースフック。たとえば、保存時にいくつかのアクションを実行できます。


クエリビルダー


  const john = yield Database .table('users') .where('username', 'john') .limit(1) 

明id(雄弁)


 yield User.all() yield User.query().where('status', 'active').fetch() 

関係


 class User extends Lucid { profile () { return this.hasOne('App/Model/Profile') } posts () { return this.hasMany('App/Model/Post') } } 

Laravelがある場合、なぜAdonisJSですか?


phpが積極的に開発しているという事実にもかかわらず、jsは多くの点でそれを追い越しました。 フロントエンドとそのフレームワークを見てください。 1つのVueJSに価値があります。 ポイントについて説明します。


同じ構文


前面と背面の両方に同様の言語構成


ジャイアントワールドNPM


あなたはそれを作曲家に劣らないnpmでそれのためにトリッキーな機能的な外観が必要です。


すぐに使える非同期


コントローラーでは、最初から応答を返すことができます。 そして、バックグラウンドに対して、この後に実行するすべての時間のかかるブロッキング操作:


高性能


私は小さなテストをいくつか行いましたが、NodeJSがすべてを勝ち取りました。


Webソケット


Eloquentのようなモデルを使用してwsで作業することは非常に便利です。


 class SiteController { * save (request, response) { response.ok({success:true}) const post = new SiteRequest() post.fill( request.all() ) yield post.save() // SQL Update console.log(request.all()) } } 

しかし、jsシングルスレッドはどうでしょうか?


このコードはNodeJS dockから取得したカスタムソリューションであり、プロセスを並列化できます。


 const cluster = require('cluster'); const numCPUs = require('os').cpus().length const http = require('./bootstrap/http') if (process.env.NODE_ENV === 'production') { if (cluster.isMaster) { console.log(`Master ${process.pid} is running`); // Fork workers. for (let i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', (worker, code, signal) => { console.log(`worker ${worker.process.pid} died`); }); } else { // Workers can share any TCP connection // In this case it is an HTTP server runServer() console.log(`Worker ${process.pid} started`); } }else{ runServer() } function runServer() { const http = require('./bootstrap/http') http(function () { use('Event').fire('Http.start') }) } 

また持っている



これについて、レビューを完了し、いくつかのリンクを共有したいと思います。




Source: https://habr.com/ru/post/J324220/


All Articles