搜索
首页web前端js教程羽毛的初学者指南。

Feathers.js:快速构建RESTful API服务器的指南

A Beginner’s Guide to Feathers.js

核心要点:

  • Feathers.js 简化了RESTful API服务器的创建,处理大部分重复的后端工作,让开发者专注于代码定制和配置。
  • 该框架基于Express构建,支持SQL和NoSQL数据库,使用自动生成必要代码的服务,可以轻松进行CRUD操作。
  • Feathers.js中的身份验证可以使用JSON Web Tokens (JWT)来保护API端点,确保只有授权用户才能访问或修改数据。
  • Feathers.js中的钩子(Hooks)充当中间件函数,可以在数据到达数据库之前或之后操作数据,这对于验证、授权和动态添加字段等任务非常有用。
  • Feathers.js 旨在易于使用和扩展,通过WebSockets支持实时更新,并提供适用于各种前端框架的灵活架构。

本文将指导您使用Feathers.js在Node.js中构建RESTful API服务器。

API服务器,也称为应用程序服务器,是一个向前端应用程序提供数据的程序。它还在后端处理业务逻辑,并提供对组织数据库的受限访问。它不仅可以防止未经授权的人员访问数据;如果登录用户没有权限,它还可以限制他们访问或更改数据。

您构建的每个应用程序都需要向最终用户提供服务。为此,您的应用程序需要处理数据。您可以使用远程API来创建新服务。但是,对于大多数应用程序,您需要管理自己的数据存储。一个流行的选择是使用在线数据存储服务,例如Firebase。这样,您不必处理运行分布式数据库服务器的繁琐细节。但是,您的项目需求可能需要使用功能齐全的内部数据库管理系统,例如MongoDB或Oracle。为了让您的前端应用程序访问数据库中存储的数据,您需要一个位于数据库和前端应用程序之间的服务器应用程序。

A Beginner’s Guide to Feathers.js

如上图所示,应用程序服务器的工作是从数据库中使用SQL或NoSQL命令访问数据,并将其转换为前端应用程序(客户端浏览器)可以理解的格式——例如JSON。此外,应用程序服务器可以使用各种安全协议——例如HTTPS加密和令牌授权——来确保数据库和客户端应用程序之间的通信安全可靠。使用这种架构的一个主要优点是,您可以使用相同的应用程序服务器部署针对不同平台的应用程序——桌面、移动、Web等等。而且,为了高效地为更多用户提供服务并实现快速的响应时间,也很容易水平扩展您的应用程序。

我们将构建一个简单的API服务器,并演示Feathers提供的各种功能。

先决条件:

在开始学习本教程之前,您需要对以下主题有扎实的基础:

  • ES6 JavaScript
  • 创建Express应用程序
  • 使用Express创建RESTful API

Feathers构建在Express之上,Express是Node.js的一个极简主义Web框架。如果您完成了链接中演示的教程,您会发现仅仅使用Express构建RESTful API非常费力。使用Feathers,大部分重复性工作已经为您完成。您只需要专注于配置和定制代码。让我们深入代码,学习这个Web框架是如何工作的。

项目创建:

要开始使用Feathers,您需要全局安装其命令行应用程序:

npm install -g @feathersjs/cli

接下来,使用以下命令创建一个新的API项目:

mkdir contacts-api
cd contacts-api
feathers generate app

以下是我的选择,您可以随意选择任何测试框架。不幸的是,测试不在本文的重点范围内,因此这里不会介绍。我个人喜欢简单,这就是我选择Jest的原因。

A Beginner’s Guide to Feathers.js

安装完成后,您可以打开您喜欢的代码编辑器查看项目文件。

A Beginner’s Guide to Feathers.js

如果您完成了我在先决条件部分列出的Express教程,那么生成的代码不应该让您感到害怕。这是一个简短的摘要,描述了文件夹和文件。

A Beginner’s Guide to Feathers.js

现在不必太担心每个文件的作用。在本教程的过程中,您会逐渐了解它们的工作方式。现在,让我们确认测试是否正常工作。

代码风格检查(Linting):

为了确保我们的项目符合定义的ESLint规则,只需运行命令npm test。如果您使用的是Unix或Linux平台,这应该可以正常运行。如果您使用的是Windows,则需要调整一些内容才能成功运行测试。

首先,转到package.json并查看scripts部分。将test行更改为:

"scripts": {
  "test": "npm run eslint && SET NODE_ENV= npm run jest",
},

接下来,如果您在Visual Studio Code中安装了Prettier,则需要在“工作区设置”选项卡中将单引号设置更改为true:

{
  "prettier.singleQuote": true
}

最后,确保在创建或编辑任何文件时,换行符为LF。如果您使用的是Visual Studio Code或类似的编辑器,您可以在状态栏中检查当前的换行符样式。如果显示CRLF,则更改为LF。进行这些更改将帮助您通过代码风格检查测试。不幸的是,要使测试通过需要更多工作,这里将不作介绍。

让我们看看如何生成CRUD RESTful接口。

生成服务:

在Express中构建RESTful CRUD API接口需要一些工作。在Feathers中,您只需执行单个命令,回答几个问题,即可生成代码:

npm install -g @feathersjs/cli

在本教程中,我们将使用NeDB数据库。Feathers确实支持SQL数据库(如MySQL)和NoSQL数据库(如MongoDB)。但是,安装数据库系统——无论是在您的机器上还是在云服务器上——都需要花费一定的时间来配置它。另一方面,NeDB是一个完全用JavaScript编写的内存数据库,支持MongoDB API的一个子集。无需配置;您只需安装它即可。它非常适合原型设计和测试新应用程序。这就是我们将在本教程中使用的数据库。

让我们简要地看一下使用此命令生成的一些文件:

  • services/contacts/contact.service.js。这是一个Feathers服务,它为/contacts提供CRUD API端点。非常小,不是吗?这是因为Feathers为我们完成了繁重的工作。它使我们免于编写样板CRUD代码。
  • services/contacts/contact.hooks.js。在这里,我们自定义CRUD逻辑的行为。我们有before部分,我们可以在Feathers读取或写入数据库之前检查或更改数据。我们还有一个after部分,我们可以在将结果发送到客户端应用程序之前检查或更改数据库中的结果。我们可以执行诸如限制访问、数据验证、执行联接操作以及计算附加字段或列的值等操作。
  • models/contacts.model.js。在这里,我们定义一个模型并将其附加到数据库表。这也是我们定义模式的地方,该模式可用于在插入或更新新记录时验证字段。不幸的是,NeDB不支持模式。但是,我已经提供了一个连接到MongoDB的模型示例,该模型通过mongoose适配器支持模式功能:
mkdir contacts-api
cd contacts-api
feathers generate app

尽管使用NeDB有一些限制,但它仍然是一个非常适合原型设计的数据库。大多数NoSQL数据库允许您使用任何结构提交数据,而无需首先定义模式。最好在实现项目需求后实现模式。有了模式,Feathers将使用您定义的规则为您执行字段验证。您需要一个可用于生产的数据库(如MongoDB)才能定义模式。请注意,开发数据库的配置定义在config/default.json中:

"scripts": {
  "test": "npm run eslint && SET NODE_ENV= npm run jest",
},

这是提供数据库凭据的地方。我们还有另一个配置文件config/production.json。这是在部署Feathers应用程序时使用的生产数据库配置。在开发过程中使用单独的数据库非常重要。否则,您有删除或损坏生产数据库中业务运营数据的风险。

现在我们已经设置了联系人的CRUD服务,是时候试一试了。您可以使用命令npm start启动Feather服务器。请注意,此服务器不支持热重载。因此,每次更改代码时都需要重新启动它。为了与我们的Feathers应用程序交互,我们需要一个API浏览器工具,例如Postman或Insomnia。在本教程中,我将使用Insomnia,但是您可以轻松地使用Postman或任何其他工具来进行操作。

创建新的GET请求(按Ctrl N),并将其命名为“列出联系人”。在URL部分,输入http://localhost:3030/contacts。当您点击“发送”按钮时,您应该看到以下视图:

A Beginner’s Guide to Feathers.js

什么也没有!我们的数据库当前为空,因此我们需要创建一些新的联系人。创建一个名为“创建联系人”的新请求。填写其余字段,如下所示:

A Beginner’s Guide to Feathers.js

如果您忘记将上述表单中的方法更改为POST,您可以稍后进行更改。将方法更改为POST,并将“正文”选项卡更改为JSON。将以下数据复制到JSON选项卡中:

npm install -g @feathersjs/cli

当您点击“发送”按钮时,您应该会收到以下响应。请注意,已为您的新联系人生成了一个_id

A Beginner’s Guide to Feathers.js

返回“列出联系人”,然后再次点击“发送”按钮。您应该得到以下结果:

mkdir contacts-api
cd contacts-api
feathers generate app

返回“创建联系人”,并发布几个新记录:

"scripts": {
  "test": "npm run eslint && SET NODE_ENV= npm run jest",
},
{
  "prettier.singleQuote": true
}

现在让我们执行更新操作。为此,我们不会使用UPDATE HTTP方法。此方法将完全覆盖记录。我们想要做的只是覆盖单个字段,而不是整个记录。为此,我们将使用PATCH。创建一个新的请求,“更新联系人”,如下所示:

A Beginner’s Guide to Feathers.js

在URL字段中,输入http://localhost:3030/contacts/{_id}。用第一条记录的ID替换{_id}。将以下数据粘贴到JSON选项卡中:

feathers generate service

点击“发送”按钮。您应该会看到以下结果:

A Beginner’s Guide to Feathers.js

请注意其余字段保持不变。接下来,我们将删除一条记录。这很容易。只需创建一个新的DELETE请求,并将其命名为“删除联系人”。在URL字段中,使用格式http://localhost:3030/contacts/{_id}。就像之前一样,用要删除的记录的ID替换{_id}。点击“发送”将为您删除该记录。您可以通过再次运行“列出联系人”请求来确认。

我们刚刚验证了所有CRUD操作都运行正常。在下一节中,我们将学习如何设置身份验证。

(以下内容与原文类似,但进行了部分语句调整和段落合并,以提高可读性和流畅性,并保持原意不变。图片格式保持不变。)

身份验证:

目前,我们的/contacts API端点不受保护。如果我们将应用程序部署到云服务器,任何拥有URL的人都可以访问和操作我们的记录。为了限制访问,我们需要设置身份验证。我们将使用JSON Web Tokens来为我们的API应用程序实现身份验证。运行以下命令来设置它:

npm install -g @feathersjs/cli

如您所见,Feathers支持不同的用户身份验证方式。“本地用户名 密码”选项最容易设置。

选择以下选项:

接下来,我们需要创建一个新用户。我们可以使用Insomnia或任何其他API浏览器工具来完成此操作。创建一个新的请求,并将其命名为“创建用户”。

在JSON选项卡中,发送以下数据:

mkdir contacts-api
cd contacts-api
feathers generate app

您应该会收到类似以下的响应:

我们现在有了一个用户。让我们通过创建一个新的请求“列出用户”并发送URL http://localhost:3030/users来确认这一点。不幸的是,您将收到以下响应:

我们需要进行身份验证才能访问此数据。由于我们没有开发可以用来登录的前端应用程序,我们将继续使用API浏览器。创建一个新的请求,并将其命名为“获取JWT令牌”。填写表单,如下所示:

此请求使用POST方法。为了更清晰起见,您可以将其重命名为“登录”。在JSON选项卡中,复制以下数据:

"scripts": {
  "test": "npm run eslint && SET NODE_ENV= npm run jest",
},

点击发送按钮后,您应该会收到以下响应:

复制令牌代码(不带双引号)。转到“列出用户”请求页面,选择“Auth”选项卡并选择Bearer。将此令牌代码粘贴到TOKEN字段中。

点击“发送”按钮后,您应该会看到用户列表。请注意,我们的身份验证系统并不完全安全。任何拥有/users URL端点的人都可以创建一个新帐户并访问我们的系统。为了防止未经授权创建新帐户,我们也需要限制该端点。打开文件services/users/users.hooks.js并更新以下代码段:

这将确保只有经过身份验证的用户才能创建新帐户。下一步是保护/contacts端点。只需打开文件services/contacts/contacts.hooks.js并相应地进行更新:

重新启动Feathers服务器以使代码更改生效。如果您尝试运行“列出联系人”请求,您将收到以下响应:

要进行身份验证,您需要像之前一样设置Bearer令牌。完成此操作后,您可以发送请求,并且应该会收到您的联系人列表。请注意,您之前获得的令牌将在一天后过期。为提高效率,最好使用环境变量,以便更容易一次更新所有API请求参数。在构建前端应用程序时,您需要将此令牌存储在本地存储中。不要使用cookie。否则,您的应用程序将容易受到CSRF攻击。查看Feathers安全文档,了解您应该注意的其他安全风险。

现在您已经设置了身份验证,之后创建的任何新服务都将为您提供保护新端点的选项。让我们在下一节中查看本教程的最后一个主题。

钩子(Hooks):

钩子是附加到服务方法之前、之后或出错时的中间件函数。它们通常用于处理日志记录、限制访问、保护字段、填充相关实体、发送通知等。如果您查看services/users/users.hooks.js,您可以看到一些内置的Feathers钩子正在使用中。我们将创建我们自己的自定义钩子。首先,停止服务器并删除data/contacts.db数据库表。接下来,使用以下命令生成一个新钩子:

npm install -g @feathersjs/cli

使用以下选项创建自定义钩子process-contact

我们想在这个钩子中做的是在处理“创建联系人”请求之前注入两个新字段。

  • createdBy:通过_id链接到当前登录的用户
  • createdOn:添加创建日期

打开文件hooks/process-contact.js并按如下方式更新文件:

接下来,创建一个另一个钩子populate-user,它将在请求时将用户对象附加到每个联系人记录。按照以下屏幕截图中的说明进行操作:

打开文件hooks/populate-user并插入以下代码:

现在您可以启动服务器了。使用“创建联系人”请求再次创建三个联系人。如果您还没有设置Bearer令牌,请设置它。否则,您将收到授权错误。这是创建新联系人时应该得到的响应类型:

总结:

我希望您现在已经学习了如何快速构建自己的RESTful API服务器。我们只触及了基础知识,您应该阅读完整的指南以发现Feathers可以提供的更多功能,这些功能可以帮助您以最小的努力实现高级功能。您还应该查看Awesome Feathers页面,其中包含大量的资源。无论您需要插件、项目示例还是教程,您都可能会在那里找到链接。您还应该查看Feathers-plus CLI,它是增强版的Feathers。它在Feathers CLI已提供的功能之上添加了新功能,例如生成用于播种和GraphQL支持的代码。

如果您想进一步改进contacts-api项目,我建议您使用您选择的框架创建一个新的前端应用程序。为/contacts/users端点构建登录屏幕和CRUD页面。享受实施挑战的乐趣。

关于Feathers.js的常见问题:

  • 什么是Feathers.js? Feathers.js是一个用于构建实时应用程序的Web框架。它旨在轻量级、灵活且易于使用,提供了一套用于构建可扩展和可维护服务器端应用程序的工具和模式。

  • Feathers.js支持哪些编程语言? Feathers.js主要在服务器端和客户端使用JavaScript。它可以在服务器上与Node.js一起使用,并支持客户端上的各种JavaScript框架,包括React、Angular和Vue.js等框架。

  • Feathers.js的关键特性是什么? Feathers.js包括实时功能(通过WebSocket和RESTful API)、面向服务的架构、对各种数据库(MongoDB、PostgreSQL等)的支持、身份验证和授权机制以及用于扩展的插件系统等特性。

  • Feathers.js如何处理实时通信? Feathers.js利用WebSockets的功能来实现实时通信。它开箱即用地提供了一个实时API,允许客户端在服务器上的数据发生更改时接收实时更新。

  • 我可以将Feathers.js用于服务器端渲染(SSR)吗? 虽然Feathers.js主要用于构建API和实时应用程序,但它可以与Next.js或Nuxt.js等其他框架结合使用,以实现Web应用程序的服务器端渲染(SSR)。

所有图片链接都保留了原文的格式。

以上是羽毛的初学者指南。的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
JavaScript数据类型:浏览器和nodejs之间是否有区别?JavaScript数据类型:浏览器和nodejs之间是否有区别?May 14, 2025 am 12:15 AM

JavaScript核心数据类型在浏览器和Node.js中一致,但处理方式和额外类型有所不同。1)全局对象在浏览器中为window,在Node.js中为global。2)Node.js独有Buffer对象,用于处理二进制数据。3)性能和时间处理在两者间也有差异,需根据环境调整代码。

JavaScript评论:使用//和 / * * / * / * /JavaScript评论:使用//和 / * * / * / * /May 13, 2025 pm 03:49 PM

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python vs. JavaScript:开发人员的比较分析Python vs. JavaScript:开发人员的比较分析May 09, 2025 am 12:22 AM

Python和JavaScript的主要区别在于类型系统和应用场景。1.Python使用动态类型,适合科学计算和数据分析。2.JavaScript采用弱类型,广泛用于前端和全栈开发。两者在异步编程和性能优化上各有优势,选择时应根据项目需求决定。

Python vs. JavaScript:选择合适的工具Python vs. JavaScript:选择合适的工具May 08, 2025 am 12:10 AM

选择Python还是JavaScript取决于项目类型:1)数据科学和自动化任务选择Python;2)前端和全栈开发选择JavaScript。Python因其在数据处理和自动化方面的强大库而备受青睐,而JavaScript则因其在网页交互和全栈开发中的优势而不可或缺。

Python和JavaScript:了解每个的优势Python和JavaScript:了解每个的优势May 06, 2025 am 12:15 AM

Python和JavaScript各有优势,选择取决于项目需求和个人偏好。1.Python易学,语法简洁,适用于数据科学和后端开发,但执行速度较慢。2.JavaScript在前端开发中无处不在,异步编程能力强,Node.js使其适用于全栈开发,但语法可能复杂且易出错。

JavaScript的核心:它是在C还是C上构建的?JavaScript的核心:它是在C还是C上构建的?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc; saninterpretedlanguagethatrunsonenginesoftenwritteninc.1)javascriptwasdesignedAsalightweight,解释edganguageforwebbrowsers.2)Enginesevolvedfromsimpleterterterpretpreterterterpretertestojitcompilerers,典型地提示。

JavaScript应用程序:从前端到后端JavaScript应用程序:从前端到后端May 04, 2025 am 12:12 AM

JavaScript可用于前端和后端开发。前端通过DOM操作增强用户体验,后端通过Node.js处理服务器任务。1.前端示例:改变网页文本内容。2.后端示例:创建Node.js服务器。

Python vs. JavaScript:您应该学到哪种语言?Python vs. JavaScript:您应该学到哪种语言?May 03, 2025 am 12:10 AM

选择Python还是JavaScript应基于职业发展、学习曲线和生态系统:1)职业发展:Python适合数据科学和后端开发,JavaScript适合前端和全栈开发。2)学习曲线:Python语法简洁,适合初学者;JavaScript语法灵活。3)生态系统:Python有丰富的科学计算库,JavaScript有强大的前端框架。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器