当前位置: 首页 > 后端技术 > Node.js

为什么我选择了AdonisJs

时间:2023-04-03 18:42:17 Node.js

原文地址:https://adonis-china.org/posts/2前言我有时候和Laravel打交道,各种代码生成工具,各种Eloquent相关操作,各种微信,支付插件-中,结合Larvel-admin扩展来写后台,实在是太爽了。但是总觉得PHP+Java不够优雅,所以最近折腾了AdonisJs——一个NodeJs版本的Laravel。其实很早以前我就尝试过MEAN和Sails,但是因为Laravel的根深蒂固的思想,一直对它们不感兴趣。而且NodeJs的市场本来就鱼龙混杂,各个框架都有自己的想法,所以一直在寻找Laravel的Node实现,于是就和AdonisJs结下了不解之缘。JavaScript相对于PHP的优势与PHP相比,NodeJs在全栈开发方面有着天然的优势。它使用npm安装扩展,与前端编程语言统一(废话)。很简单:在新机器上安装NodeJs,设置好淘宝镜像就OK了。许多其他命令行工具可以使用npm安装。从最初的百花发展到现在,webkit是移动应用的霸主。在很多场景下,已经被混合模式的APP统一了。现在几乎很难看到没有H5的完全原生的应用。NW.js的没落和Electron的崛起,让js再次在桌面端站稳了脚跟,甚至桌面端的Linux也几乎被Ubuntu一统天下。JavaScript可以做服务器、WEB、桌面、APP客户端,但是世界上最好的PHP却不能如愿以偿。AdonisJs的优点完全符合Laravel的思路,无论是逻辑上还是代码上都可以从Laravel顺利迁移过来。这对于以后的扩展、插件等周边的改进非常重要!与MEAN、Express、Koa等框架相比,AdonisJs是一套完整的解决方案,没有东拼西凑的感觉。而且流程清晰,思路规范,更适合小型企业级开发。与meteor、sailsJs等其他真正的“全栈”框架相比,AdonisJs和VueJs一样是渐进的。自由度高,入门更容易,在现有情况下迁移成本更低。代码生成、ORM、路由、JWT、WebSocket都得心应手。开始安装npmi-gadonis-cliadonisnewblog--skip-installcdblogcnpminstallnpmrunserve:dev这样你的第一个adonisjs项目就启动了,访问浏览器看看RMVC(routing-model-view-controller)好了,这是我自己发明的一个词。我觉得路由在MVC模型中也很重要,所以自己加了一个R。app/Http/routes.js中的路由与Laravel几乎相同。支持直接写逻辑和方法指向一个Controller。需要注意的是不支持参数注入;如果是渲染视图,则需要添加一个yieldconst。Route=use('Route')Route.get('users/:id',function*(request,response){constid=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){yieldresponse.sendView('about')})controller可以使用像Laravel的artisanace这样的命令,windows需要使用nodeace./acemake:controllerHome#或者./acemake:controllerUser--resourceUserController:constUser=use('App/Model/User')classUsersController{*index(request,response){constusers=yieldUser.all()yieldresponse.sendView('users',{users:users.toJSON()})}}还是与Laravel非常相似。需要注意的是AdonisJs中有一个use方法模拟PHP的使用,用于导入各种包和模型等,controller方法应该使用generator方法,几乎??所有的数据库查询都应该使用yield。上面说了,渲染视图也要用yield。view命令生成视图:./acemake:viewwelcome#create:resources/views/welcome.njk模板语法使用了类似于twig的nunjuncks,Laravel的blade也很类似{%ifuser.age%}你是{{user.age}}岁。{%endif%}语法高亮你需要在你的编辑器/IDE中安装nunjucks模板语法高亮插件。如果你的编辑器没有nunjucks模板语法高亮插件,可以使用twig模板语法高亮插件代替。模型创建model./acemake:modelUser#或者直接生成迁移文件,-m也可以./acemake:modelUser--migration生成的样子:app/Model/User.js'usestrict'constLucid=use('Lucid')classUserextendsLucid{}关键在关联:classBookextendsLucid{chapters(){returnthis.hasMany('App/Model/Chapter')}}学过Laravel不用的可以试试思维。不过目前只支持多对多的belongsToMany,不支持LaravelEloquent的多态关联。赶快试试吧。有问题可以直接回复。