用Orchestrate 5步快速创建Node.js应用


发布者 andrewleeson  发布时间 1396784051812
关键字 JS学习 

发表本文有一个目的:证明用Orchestrate作为node.js驱动的数据平台来创建node.js应用是如此简单和容易。

如果你是新手,那么我告诉你,Orchestrate服务是一个存储和查询数据的平台。我们支持典型的NoSQL查询:Lucene的全文搜索、键/值和文档、图表和时序性事件。

我们有各种各样查询特性的HTTP  API针对仅仅一个HTTP请求。但通常,由于开发人员关注的是工作效率最大化,我们发现用REST客户端将变得更容易,它将这些HTTP调用抽象成我们最喜欢的编程语言。

我们的朋友在Bowery上为Orchestrate写了一个很棒的NodeJS客户端。在GitHub 和NPM上可用。在这篇文章中,Steve Kaliiski (@stevekaliski) 通过构建一个数据服务来创建和更新用户账号来证明orchestrate.js的一些特性。


第一步:建立一个项目

 

为了能跟得上, 从orchestratejs-example上下载示例代码。示例的程序是由Bowery提供支持的。安装指南在README中。


第二步:连接到Orchestrate

 

在Orchestrate服务中,每个API key 属于一个“应用”。Orchestrate应用代表系统上租期的单位。

通过本文的代码我们要创建一个叫 “nodejs-usersapp-demo”的Orchestrate 应用。

注意:Orchestrate中应用名称是全球唯一的,所以当你跟着本文代码操作时,请给应用取另外的一个名字。

首先我们将在Orchestrate Dashboard 中创建应用,然后我们要提取生成的API key在代码中使用。

// An API key looks something like:
//   3854bbd7-0a31-43b0-aa94-66236847a717
var db = require('orchestrate')('your api key')


第三步:存储一个新用户帐户

 

当创建一个新用户账号时,你需要确定用户对象的标识符是唯一的。一般地,它是像UUID,用户名或电子邮箱这样东西。

Orchestrate 提供“条件PUT”的操作,意味着开发人员要指定先决条件来确定PUT请求是否能成功给予已经存在的数据集。

Orchestrate KV PUT请求支持两种可能的先决条件:

  • 如果匹配-对象的新版本将被存储到集合中,当且仅当“ref”(版本)匹配当前存储在集合中的key。在我们的文档中你可以获取更多关于“ref”的知识。
  • 如果不匹配-当且仅当有着相同key的对象不存在时,新对象才会被存储到集合中。

存储一个新的用户账号:

 db.put('users', 'steve@bowery.io', { 
"name": "Steve",
 "hometown": "New York, NY",
 "twitter": "@stevekaliski",
 "password": "my_secret_pass"
}, false)
.then(function (res) {})
.fail(function (err) {})

我们用键值对形式的JSON对象给user对象插入了一个新的对象。第四个参数是条件。Put方法的第四个参数让客户端告诉Orchestrate当不存在不同的value值时才创建对象,比如说告诉Orchestrate 这是一个新用户。


第四步:获取一个用户的账号

 

从Orchestrate中读取数据是非常简单的。例如,让我们看一个用户登陆的例子。用户将登陆信息填写在表单中后提交,之后我们的处理代码如下:

app.post('/login', function (req, res) {
 var body = req.body
 db.get('users', body.email)
 .then(function (res) {
   var user = res.body
   if (user && someHashFunction(body.password) == user.password)
     res.end('Logged in!')
   else
     res.end('Invalid login.')
 })
 .fail(function (err) {
   res.end('Oops')
 })
})

现在如果扩展下我们的应用和用户管理功能,把它变成一个搜索工具,通过它们的家乡来搜索用户。对此,我们可以利用Orchestrate的搜索特性。

db.search('users', 'New York')
.then(function (res) {})
.fail(function (err) {})

随着应用用户量的增长,你可能需要考虑将查询结果分页展示:

db.newSearchBuilder()
.collection('users')
.limit(100)
.offset(10)
.query('Portland')
.then(function (res) {})
.fail(function (err) {})

如果想要更深入的利用Orchestrate的搜索特性,可以看看这篇文章:“Querying the Enron trove with Lucene”。


第五步:连接账户



随着我们应用成长为更具社会化的应用,我们可能需要介绍一些新的特性。通过许多社交网络,用户可能会被友情,兴趣等东西连接起来。因此我们可以利用Orchestrate的图表特性给应用增加此类的数据连接关系。

Orchestrate支持图表功能,这让创建关系变得很容易。让我们考虑两个用户: Steve 和Chris。

Steve已用“steve@bowery.io”创建键值,而Chris已用 “chris@orchestrate.io”创建键值。

他们打算写一篇博客一同发布,在这个社交网络中他们很有可能成为朋友,因此:

db.newGraphBuilder()
.create()
.from('users', 'steve@bowery.io')
.related('friends')
.to('users', 'chris@orchestrate.io')

通过构造一个“newGraphReader”,我们可以查看这个关系:

db.newGraphReader()
.get()
.from('users', 'steve@bowery.io')
.related('friends')


下一步

 

现在你已经掌握了一些Orchestrate的特性,通过查阅NodeJS客户端文档你可以获取更多的信息。

我们的HTTP API文档上同样也有许多有用的信息, 你可以在Dashboard上获取支持或给我们反馈信息,你也可以在HipChat Community channel.上找到我们。访问我们,告诉我们需要改进的地方和你在构建的东西。

最重要的是,用Orchestrate开心的构建优秀的项目。





回复 (1)
  • #
  • #1 冰冰 1397101187000
    不是很明白,需要什么环境么?
微信扫码 立即评论