有 Rails,然后是 Laravel,现在是 Adonis js
关注我!:关注@EricTheCoder_
Adonis = Node 的 MVC 框架
我是一名 Rails 和 Laravel 开发者。我非常喜欢这两个框架。它们功能强大、稳定、快速且易于使用。一旦你习惯了使用一个优秀的 MVC 框架进行开发,就很难再回头了。
今年早些时候,我接到一个任务,要开发一个 JavaScript 前端应用。为了配合这个应用,我心想,为什么不也用 JavaScript 做一个后端呢?我的目标是把我的整个技术栈都用 JavaScript 实现。
理论上看起来很容易,但实际上比预想的要复杂得多。我找不到一个在我看来能和 Laravel 和 Rails 媲美的 JavaScript 框架。Laravel 的开发效率很高,功能强大、速度快,而且使用起来非常方便,令人愉悦。
我确实尝试了 3 种不同的框架,但没有一个符合我的要求,所以我决定在这个项目中使用 Laravel 后端。
最近,我偶然发现了一个已经存在了一段时间的框架,但由于某种原因,它突然消失了。这个框架就是 Adonis.js。
Adonis 是什么?简而言之,它是 Node.js 版的 Laravel。它是一个与其他 Node.js 框架截然不同的框架。与 Laravel 一样,Adonis 的使命是提升开发者的幸福感,并提供从头到尾完成项目所需的所有工具。
我还没有在生产中做过真正的项目,但我仍然有机会做一些有趣的小项目,我不得不说,我很惊喜地发现 Adonis 是多么自然和易于使用。
作为一个像 Laravel 一样的 MVC 框架,学习曲线要短得多。
以下是一些 Laravel 代码与 Adonis.js 代码的比较示例。看看它们的相似之处:
Laravel 路线
Route::get('/', [PostController::class, 'index']);
阿多尼斯路线
Route.get('/', 'PostsController.index')
Laravel 迁移
public function up() {
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('title');
$table->text('content');
});
}
阿多尼斯迁徙
protected tableName = 'posts'
public async up () {
this.schema.createTable(this.tableName, (table) => {
table.increments('id')
table.timestamps(true)
table.string('title')
table.text('content')
})
}
Laravel 控制器:
class BlogController extends Controller
{
public function index()
{
$posts = Post::all();
return view('posts.index', ['posts', $posts]);
}
Adonis 控制器
export default class PostsController {
public async index (ctx: HttpContextContract) {
const posts = await Post.all()
return ctx.view.render('posts/index', {posts})
}
Laravel 视图(blade)
@extends('layouts.app')
@section('content')
<h1>Welcome to my Blog</h1>
@foreach($posts as $post)
<h3>{{post->id}}. <a href="{{ route('PostsController.show', $post)}}">{{ post->title }}</a></h3> <br>
{{ post->content }} <br><br><hr>
@endforeach
@endsection
阿多尼斯景观(边缘)
@layout('app')
@section('page')
<h1>Welcome to my Blog</h1>
@each(post in posts)
<h3>{{post.id}}. <a href="{{ route('PostsController.show', {id: post.id})}}">{{ post.title }}</a></h3> <br>
{{ post.content }} <br><br><hr>
@endeach
@endsection
正如您所见,学习曲线相当低。
但并非所有内容都相同。例如,在 Adonis 中,模型在模型文件中显式声明。在 Laravel 中,模型仅在迁移文件中定义。
Adonis模型文件:
export default class Post extends BaseModel {
@column({ isPrimary: true })
public id: number
@column.dateTime({ autoCreate: true })
public createdAt: DateTime
@column.dateTime({ autoCreate: true, autoUpdate: true })
public updatedAt: DateTime
@column()
public title: string
@column()
public content: string
}
结论
今天就到这里。敬请期待,我近期会发布更多关于 Adonis.js 的文章。
您可以在 Twitter 上关注我:关注 @justericchapman
鏂囩珷鏉ユ簮锛�https://dev.to/ericchapman/there-was-rails-then-laravel-and-now-adonis-js-2900