本文概述
如果你尚未听说Hoodie, 则应该检查一下。

Hoodie是面向前端开发人员的渐进式新库, 它采用了一些非凡的新理念, 这些理念可能会改变应用程序开发和用户体验。 Hoodie将对整个堆栈, 前端应用程序开发的控制权完全交给了前端开发人员和用户体验专家, 使他们摆脱了后端同行有时难于理解的技术异议。此外, Hoodie应用程序使用户摆脱了不间断连接的束缚, 使他们可以随时随地, 在空中或在水下使用你的应用程序。
尽管该平台还处于起步阶段, 但它已经提供了一些功能强大的新工具, 对于想要领先于游戏的任何前端开发人员来说, 都值得尝试。 Hoodie背后的团队拥有可靠的背景, 曾参与过其他非常成功的项目, 例如CouchDB, Async, Mustache.js等。
在了解了Hoodie全栈开发库的工作原理并对该项目感到非常兴奋之后, 我决定亲自尝试一下。让我告诉你更多有关Hoodie的信息, 并向你展示它开发出色应用程序的潜力。
什么是Hoodie?
首先, Hoodie是什么?有什么很棒的? Hoodie是一个开放源代码的, 完全JavaScript的平台和API, 在一个完整的堆栈开发包中结合了多种强大的新范例, 从而使开发Hoodie应用程序的开发人员以及与之交互的最终用户受益。这些概念中最主要的是” noBackend”和”离线优先”运动, 以及用于构建API的强大的社区驱动过程, 称为” Dreamcode”。
noBackend
Hoodie认为, 出色的前端应用程序开发的关键在于用户体验专家和开发人员, 他们知道如何使应用程序外观精美并易于使用, 但他们经常受到后端技术的限制他们无法控制。永远存在的基础服务器交互(例如用户注册/登录, 数据存储或电子邮件分派)继续要求为每个新应用程序耗时的自定义实现, 从而迫使前端开发人员为新的后继应用学习和编码每次都结束古怪。
noBackend意味着你不需要后端开发人员!
Hoodie通过完全抽象掉后端, 将控件交还给前端设计师和开发人员。使用Hoodie前端应用程序开发, 你不必担心服务器端, 而只需要担心的是, 内置在Hoodie中的简单, 易于学习和实现的前端API。例如, 要注册一个新用户?可以用一行代码完成:
hoodie.account.signUp(username, password);
这是Hoodie完全致力于的noBackend倡议背后的想法。 noBackend意味着你不需要后端开发人员!只需将Hoodie后端部署到你的服务器, 就不用管它了。
Hoodie完全用JavaScript编写。它的独立后端使用带有Apache CouchDB的Node.JS作为数据库。在撰写本文时, Hoodie已实现的核心功能包括用户注册和管理, 数据加载, 存储和电子邮件。通过添加其他Node.js插件, 可以轻松扩展这些核心功能。
梦码
Hoodie首先是API-这使noBackend成为可能。 Hoodie的实现可能会随着时间的推移而变化和改进, 但是提供给开发人员的界面将保持不变, 因此你无需担心。
Hoodie仍在快速增长, 并且一直在增加新功能。 Hoodie与其他noBackend项目一样, 使用社区驱动的方法来设计称为Dreamcode的API。本质上, 你梦想着要编写的代码, 如果它得到了社区的足够支持, Hoodie就会实现它。
这个API为先, 众包的方法来设计HoodieAPI意味着Hoodie代码是一件轻而易举的写入和一件轻而易举的读取。这是你梦dream以求的代码!
离线优先
Hoodie解决了很多的前端应用开发者提供其noBackend, Dreamcode驱动的API问题。但是Hoodie的主要目标之一就是也要解决用户的一个主要问题-他们对连接的依赖常常会变得残酷。
随着向具有移动应用程序的移动设备的转移的进行, 基于桌面的持续连接的旧假设一直保持不变。一直以来, 人们一直承诺, 无论你走到哪里, 互联网都将存在。时至今日, 连接中断被视为一种异常现象, 导致用户无法执行任何操作, 直到他们重新联机。但是众所周知, 电信网络未能兑现这一承诺。在飞机, 地铁, 乡村道路以及无数其他情况下, 连通性都无法实现。那就是在世界的发达地区!在地球的广阔区域, 稳定的互联网访问是该规则的罕见例外。
离线优先运动寻求与这种简单生活事实的优雅融合。使用Offline First, 非连接性只是应用程序的另一正常状态。实际上, 这是默认状态!Hoodie热情地采用了这种哲学。 API的背后是临时本地存储的完整前端实现, 并在连接可用时自动进行优雅的同步。

使用Hoodie, 你可以发表评论, 发送电子邮件, 编辑帐户, 以及执行大多数其他日常活动, 而不必担心建立连接。整个存储和同步系统可以随时中断, 而不必担心丢失数据。
当然, 该模型具有其自身独特的设计挑战和方法, 但是Hoodie的团队正在率先解决这些挑战的技术。
在应用的早期阶段, Offline First是令人兴奋的新应用开发方式。开发所需技术还有许多工作要做。看看这里, 看看Hoodie是如何做到的。
一个使用Hoodie的简单应用
为了演示Hoodie作为前端开发工具的用法, 我决定编写一个简单的应用程序, 使我们的社区成员可以创建自己的事件并将其发布, 以供其他工程师浏览并添加到他们的日程表中。请记住, 此处的目标是演示Hoodie, 而不提供可用于生产的应用程序。你可以在我的GitHub页面上找到代码。
隐藏的东西Hoodie本质上是内置于NodeJS的服务器端和客户端JavaScript库的组合。除了简单的安装和部署过程之外, 使用该应用程序的开发人员将仅使用客户端代码。内置库可以与服务器端通信, 而开发人员不知道其工作原理。
如果我们的应用程序要求我们在服务器上执行自定义操作怎么办?我们总是可以创建Hoodie插件。这是有关插件的更多信息。
开始使用Hoodie App
任何Hoodie应用程序进行全栈开发的第一步是使用Hoodie命令行工具使我们踏上第一步:
hoodie new srcminiCommunity
这将创建一个已初始化的Hoodie应用, 该应用已经有一些代码, 我们已经可以运行我们的应用了!如果我们键入
cd srcminiCommunity
hoodie start
浏览器将打开Hoodie团队的示例应用程序:

在这一点上, 我做了一点家务。 Hoodie应用程序当前随Bootstrap和Prism一起提供, 但是我取出了提供的版本。我不需要Prism, 而是想使用自己的Bootstrap版本, 因此可以使用想要使用的字体和JS。在构建应用程序时, 我还对main.css进行了一些更改, 以赋予其自己的样式并允许使用我的简单引导模板。我只将jQuery用于DOM操作和事件。Hoodie负责其他所有事情。
Hoodie和Dreamcode
在创建此示例应用程序的过程中, 我很快意识到使用Hoodie的所有好处。这么多普通的问题在开始项目时就没有答案。 Hoodie允许我编写代码并查看该应用程序的正常运行。
我们应该使用什么策略来管理用户帐户? Hoodie帐户插件就是答案。我们应该如何在后端存储数据? Hoodie死了的简单存储API为我们处理了这一问题, 并免费为我们提供了Offline First功能!无需付出任何努力就可以使此Hoodie应用程序脱机工作, 它可以正常工作。
让我们深入了解一些实施:
用户帐号管理
Hoodie有一个名为hoodie-plugin-users的插件, 可为我们处理帐户管理。 API再简单不过了。
我们如何添加新用户?
function signUp() {
var email = $('#txtEmail').val();
var password = $('#txtPassword').val();
hoodie.account.signUp(email, password)
.fail(function(err){
console.log('Log error...let the user know it failed');
});
}
我们如何登录用户?
function signIn() {
var email = $('#txtEmail').val();
var password = $('#txtPassword').val();
hoodie.account.signIn(email, password)
.fail(function(err){
console.log('Log error...let the user know it failed');
});
}
我们有用户登录吗?
if(hoodie.account.username) {
// modify the page accordingly
setUsername();
$('#lnkSignUp').hide();
$('#lnkSignIn').hide();
}
这真的再简单不过了。等等, 我们的用户界面将如何对所有这些做出反应?Hoodie为你准备了活动
在用户登录时做出反应:
hoodie.account.on('signin', function (user) {
showMyEvents();
setUsername();
$('#lnkSignUp').hide();
$('#lnkSignIn').hide();
});
数据存储
我们的示例应用程序将允许用户创建自己的事件(私有数据), 并在需要时发布它们(公开数据), 以便其他用户可以加入事件。
Hoodie允许我们无需登录即可将数据添加到其本地存储中, 那么它如何知道该数据属于哪个用户?好吧, 它将它保持在本地状态, 直到该用户登录后才同步到服务器。Hoodie还将确保只有该用户才能访问该数据。
所以这是它的工作方式:
hoodie.account.signIn(email, password); //Let's sign in
hoodie.store.add('myevent', event); //Store the data, hoodie takes care of using the session to make sure this data belongs to our user
就这么简单!好的, 这样可以帮助我们创建活动, 如何与他人共享活动?这是全球共享插件将帮助我们的地方。我们必须安装它, 因为它不是默认插件:
hoodie install global-share
现在我们有了插件, 让我们使用吧!我们必须将已经添加到用户存储中的数据发布到全局存储中。
hoodie.store.findAll('event').publish();
这会将标记为该用户保存的所有事件标记为公开, 以便在查询全局存储时将得到该数据作为结果。
hoodie.global.findAll('event'); //This is read-only
在”我的事件”页面上, 用户可以创建直接发布到全局存储的事件。
var event = {};
event.name = $('#txtName').val();
event.date = $('#txtDate').val();
event.time = $('#txtTime').val();
hoodie.store.add('event', event).publish();

所有人都可以看到已发布的事件, 因此现在任何用户都可以看到在”事件”页面上创建的事件。

那么, 那些不应该公开的数据呢?我们存储用户已应用的事件, 并将其显示在”事件”页面上。当用户单击”应用”按钮时, 将执行以下操作:
var id = $(this).parent().parent().data('id');
hoodie.global.find('event', id)
.done(function(event){
hoodie.store.add('myevent', event);
});
下面的两个屏幕截图显示了同时运行的两个浏览器窗口。在第一个浏览器中, 该用户以已申请A事件的[受电子邮件保护]用户身份登录。在第二个中, 用户[受电子邮件保护]已登录并已应用于B事件。


长轮询
通过订阅Hoodie提供的一些事件, 我们可以透明地使用长轮询等技术, 这使我们的应用程序具有有趣的功能, 因为不同的用户正在使用它并进行协作。
这真的很容易做到。在我们的示例应用程序上, 只有一行完成了窍门:
hoodie.global.on('add:event', loadEvent);
该简单行将负责长时间轮询服务器, 以检查其他用户可能已添加的新事件, 并将其添加到”我的事件”页面。
一些担忧
构建此示例应用程序以与Hoodie及其前端应用程序开发功能一起使用后, 我对它所提供的功能感到非常兴奋。但是, 一些明显的问题对我来说很突出。
Hoodie使开发人员与服务器的通信变得如此容易, 以至于任何开发人员都可以仅通过使用控制台就可以向我们的数据库添加内容, 这显然具有重大的安全性和数据完整性。
该库仍然缺少任何生产应用程序中需要的许多重要内容, 例如数据验证, 可链接的URL, 测试框架和数据的私有共享(尽管在最后一个过程中已经取得了不错的进展)。要立即在生产中使用Hoodie, 我们必须将其与另一个解决方案(例如AngularJS, Ember或其他许多解决方案)搭配使用, 这些解决方案可以帮助我们确保前端项目的结构和可维护JavaScript代码正确无误。由于这些框架本身正在接近后端技术的复杂性, 因此该解决方案将在很大程度上违背Hoodie的目的。
Hoodie的未来
Hoodie仍在进行大量开发以解决所有这些问题。团队正在努力实现新功能并改进现有功能, 以使该平台可大量使用, 当然, 此过程需要时间。如果你现在正在计划一个新的全面应用, 那么你可能想在这个时候找到一个不同的平台来构建它。
但是与此同时, 正如我希望我已经演示的那样, 开始修补使用Hoodie进行前端应用程序开发当然还为时过早。 Hoodie中已经内置了许多强大的新想法, 我认为它们很可能会变得非常流行。在这些方面领先于游戏可能不是一个坏主意。
如果Hoodie的团队继续努力, API应该立即准备就绪。如果你想了解Hoodie团队的进度, 请查看其里程碑跟踪器。
Hoodie承诺将使轻而易举地为动子和振动器开发出色的应用程序。如果Hoodie体现的想法流行起来, 我们可能会看到每个新项目都需要一支后端开发人员团队已成为过去。通过这样的项目, 很容易想象在不久的将来前端开发人员的黄金时代。同样, Offline First理想产品为用户带来的好处是可访问性迈出的一大步, 将我们的移动互联生活方式的影响范围扩展到了互联网本身无法访问的地方。
前往Hoodie主页, 了解Hoodie的进展, 并成为其准备迎接的令人兴奋的新变化的一部分。
特别感谢Hoodie团队。经Hoodie开源项目许可使用的Hoodie徽标