如何使用Feathers.js和SQLite代码和配置构建RESTAPI?你想在几天内创建一个生产就绪的应用程序吗?信不信由你,这是可能的!本教程将向您展示如何使用Feathers.js在几分钟内创建一个RESTAPI。我们将学习如何使用Feathers.js实现示例API,并分享一些想法和注意事项。1.什么是Feathers.js?Feathers.js是一个轻量级Web框架,用于使用JavaScript或TypeScript开发实时应用程序和RESTAPI。Feathers.js可以与任何后端技术交互,支持十几种数据库,也可以与任何前端技术协同工作,例如React、VueJS、Angular和ReactNative。Feathers.js以其易用性、交付速度和大量文档而闻名。使用Feathers,您只需运行一个简单的命令即可添加功能。2.知识准备本教程为实战演示。首先,您需要准备如下:安装Node.js安装Arctype安装Insomnia熟悉Node.js和Express.js3.我们要构建什么您将创建一个电影租赁应用程序来演示功能Feathers.js和Arctype数据库可视化工具。管理员将在此程序中生成电影,经过身份验证的用户将能够租借它们。您将学习使用Sequelize关联feather.js中的表格、限制对特定路线的访问以及将数据库链接到Arctype。4.准备开始首先打开命令行界面,使用如下命令为本教程创建一个文件夹:npminstall@feathersjs/feathers--save等待安装完成,使用以下命令确认安装成功:feathers-V如果安装一切顺利,您将在控制台上看到版本号。5.创建一个应用安装Feather.js后,使用下面的命令为这个应用创建一个文件夹:MkdirRestWithFeathers&&RestWithFeathers然后,使用下面的命令生成一个新的API应用:feathersgenerateapp上面的命令会提示你为应用程序选择配置。对于本教程中的演示,您的选择应如下面的屏幕截图所示:在上面的屏幕截图中,我们做出了以下选择:首选编程语言是Javascript指定应用程序的名称(电影租赁)选择src作为样板的项目位置选择npm作为包管理工具启用用户身份验证选择使用Eslint分析我们的代码选择用户名和密码身份验证策略选择用户作为实体名称选择Sequelize作为应用程序ORM选择SQLlite作为我们的数据库指定数据库名称为OncemovieDB被选中,这个命令将生成一个类似Express.js的项目结构。让我们看看运行上述命令生成的文件夹结构。在本教程中,我们将看到以下内容:config:包含应用程序的配置文件node_modules:用于存储运行应用程序所需的已安装包列表的文件夹public:包含可提供给客户端的静态文件src:包含服务代码对于Feathers.js应用程序src/hooks:包含应用程序的自定义挂钩src/middleware:包含Express.js中间件src/service:包含我们的应用程序服务src/index.js:启动应用程序入口文件src/app.js:配置Feathers.js应用程序src/app.hook.js:包含应用于每个服务的挂钩src/channels.js:设置Feathers.js事件通道test:包含应用程序的测试代码现在以开发模式启动服务使用以下命令:npmrundev在开发模式下运行服务会激活热重载和控制台错误日志记录。此时服务运行在3030端口,项目根目录下会创建一个moviedb.sqlite文件。6.创建服务服务是实现某些方法的对象或类的实例。服务为与任何数据交互提供一致的、独立于协议的接口。在Feathers.js中,您只需运行一条命令,一切就绪,即可创建服务。使用以下命令创建电影应用程序:feathersgenerateservice上面的命令将提示您为您的服务选择一个配置。您的选择应该类似于下面的屏幕截图:在这里,您已经为电影项目表选择了ORM、服务名称、路由URL,并在电影项目路由上启用了身份验证。完成这些选择后,该命令将在src/service文件夹中生成以下文件夹结构。在您的movie.hook文件中,Feathers添加了以下代码片段,以确保在通过此路由将请求传递到电影服务之前,必须验证用户登录时发送的用户访问令牌。之前:{all:[]find:[authenticate('jwt')]get:[authenticate('jwt')],create:[hashPassword('password')],update:[hashPassword('password'),authenticate('jwt')],patch:[hashPassword('password'),authenticate('jwt')],remove:[authenticate('jwt')]},然后,使用如下命令创建一个租赁服务feathersgenerateservice对电影服务做同样的事情,但是这次生成不同的文件夹名称和文件,如下所示:它还会在所有路由上调用JWTauthenticate('jwt')方法。此外,该命令将为您刚刚创建的服务生成相应的模型,其中包含一些样板,如下所示:7.创建数据库表创建服务和模型后,修改模型的属性以获取电影和租赁表需要的属性。对于电影模型,将以下属性添加到属性中。title:{type:DataTypes.STRING,allowNull:false,},producer:{type:DataTypes.STRING,allowNull:false,},imageURL:{type:DataTypes.STRING,allowNull:false,},createdAt:{类型:DataTypes.DATE,defaultValue:Date.now},updatedAt:{type:DataTypes.DATE,defaultValue:Date.now},然后,在租赁模型中,添加以下属性:quantity:{type:DataTypes.INTEGER,allowNull:false,},createdAt:{type:DataTypes.DATE,defaultValue:Date.now},updatedAt:{type:DataTypes.DATE,defaultValue:Date.now},我们需要在用户、电影、租赁模型中创建关联,让我们转到下一部分。8.数据关系数据库关系是使用连接语句检索数据时表之间形成的关联。通常使用ER图来规划关系。我们的应用程序有一个用户表、一个电影表和一个租赁表。电影归租赁公司所有,用户拥有租赁公司。在每个数据库中,维护这些数据最直接的方法是在它们之间建立关系,将表ID作为它们相关表中的外键。让我们继续创建三个表之间的关系。在models/user.models.js中,找到以下注释的位置://Defineassociationshere//Seehttps://sequelize.org/master/manual/assocs.html并添加以下代码片段const{rentals}=模型;users.hasMany(租金);在代码片段中,您在users表和rentals表之间创建了一对多关系。这意味着一个用户可以有多个租户。之后,我们可以将以下代码添加到models/movie.model.js文件中:const{rentals,movie}=models;movie.belongsToMany(租金,{通过:'MovieRendtals'});在上面的代码片段中,我们在Movies表和Rentals表之间创建了多对多关系,这意味着一部电影可以有多个租借。在多对多关系中,创建一个连接表来跟踪两个表的ID,在本例中为MovieRentals。最后,将以下代码片段添加到models/rentals.model.js文件:const{users,movie}=models;rentals.belongsTo(用户);rentals.belongsToMany(电影,{通过:'MovieRentals'});现在,这些表彼此相关。您可以在创建数据或从任何服务获取数据时将数据加载到表中。这将我们带到了Feathers.js中的钩子函数。9、添加自定义钩子钩子是一个插件化的中间件功能,可以在服务方法前、服务方法后、方法报错时注册。您可以注册一个挂钩函数或创建一个挂钩函数链来创建复杂的工作流。您可以创建一个挂钩来加载与每个表相关的数据。在您的service/rentals文件夹中,创建get-related.js文件并将以下代码片段放入文件中:module.exports=function(options={}){returnasync(context)=>{constsequelize=context.app.get('sequelizeClient');const{users,movie}=sequelize.models;context.params.sequelize={include:[{model:users},{model:movie}],raw:false,};返回上下文;};};在上面的代码片段中,Feathers.js被告知在租借电影时记录用户和电影模型数据。现在使用以下代码片段更新您的service/rentals/rental.hooks.js文件。修改before对象中的代码。全部:[authenticate('jwt')],查找:[getRelated()],获取:[getRelated()],创建:[getRelated()],更新:[],补丁:[],删除:[]10.应用程序测试现在让我们用Insomnia测试应用程序。我们从用户路由开始。(1)创建用户在/user路径下创建用户(2)对用户进行认证在/authentication路径下验证用户(3)创建电影在/movie路径下创建电影(4)租电影租a/rentals路线电影下的电影。您将在此路由中指定userId、movieId和quantity字段。现在继续测试每个路由上的其他请求方法,例如GET、UPDATE和DELETE。11.连接到Arctype将数据库连接到Arctype以查看应用程序中创建的表和数据。您可以按照以下步骤连接到Arctype:(1)运行Arctyp(2)单击SQLite选项卡(3)单击选择SQLite文件按钮(4)导航到项目文件夹并选择moviedb.sqlite文件(5)测试连接并保存配置数据库成功连接到Arctype后,您将看到用户表、电影表、租金表和MovieRentals表,如下面的屏幕截图所示。此时,您的数据库已成功连接到Arctype。您可以单击每个表以查看存储的数据。12.结论在本教程中,您通过构建演示应用程序了解了Feathers.js。您已经学习了如何设置feather.js应用程序、创建服务、实施身份验证/授权、创建自定义挂钩以及连接到Arctype。现在您已经掌握了这些知识,您打算如何在下一个项目中使用Feathers.js?您甚至可以通过分叉或克隆GitHub存储库来向该项目添加一些额外的功能。原文链接:https://dzone.com/articles/building-a-rest-api-with-feathersjs-and-sqlite译者简介卢新望,社区编辑,90后程序员出家半。做过前端页面,写过业务接口,做过爬虫,学过JS,有幸接触到Golang,参与过微服务架构的改造。目前主要编写Java,负责公司可定制低代码平台数据引擎层的设计和开发。
