4

我正在尝试使用 Javascript SDK 设置 Azure DocumentDB。到目前为止,我有一个主密钥、一个端点 url,以及一个数据库设置和一个集合。我想不通的是如何用他们需要的值代替我所拥有的,而且我在文档或其他地方找不到任何可以参考的东西。

下面是我试图填充值的代码。我的想法是collectionurl =我的端点url,resourceToken =我的密钥,collectionId =集合名称。但是什么是hostedendpoint,我应该如何设置resourceToken?我知道这没什么好做的,但是如果有人使用过 DocumentDB,我将非常感谢您的帮助。

var host = (hostendpoint);                        // Add your host
var resourceToken = {};
resourceTokens[(collectionId)] = (resourceToken); // Add the collectionId and resourceToken for read/write on the collection
var collectionUrl = (collectionUrl);              // Add the collection self-link
var client = DocumentDB.createClient(host, {resourceTokens: resourceTokens});
var documentDefinition = {id: "Hello world document", content: "Hello World!"};
client.createDocument(collectionUrl, documentDefinition, function(err, createdDocument) {
    if (err) {
        throw err;
    }

    console.log('result', createdDocument.content);
})

http://dl.windowsazure.com/documentDB/jsclientdocs/

4

3 回答 3

4

让上面的 JS SDK 代码示例工作的步骤如下:

  • 将您的 DocumentDB 端点放在(hostendpoint).
  • 将集合资源 ID(这是集合 JSON 文档中的 属性_rid,而不是id属性)作为 的值 (collectionId)
  • 将权限令牌(您需要为集合创建用户和权限)作为(resourceToken).
  • _self集合的链接放在(collectionUrl)

完成的代码示例应类似于以下内容:

var host = "https://bloopbloop.documents.azure.com:443"; // Add your host

var resourceTokens = {};
resourceTokens["Pa0wAKPRZQA="] = "type=resource&ver=1&sig=WaOXNCJaZ7Z7obf74i48Yg==;Dbb5bXDnm5ou0rpAUyifsFR5VNIsfSTeuad81P7zC7ytJtSwLCLnw9ne99vuIH8/giBsYIrqtXE5PYDs2idLfdJ4+K3bfT8BJgWqdgIuIEE/nvVpdEQ85y1azPXO7F+wXwBzK4eH2wQ0yMudy+petUdnN1GR3VJNsuNTZ1j+mnLLT/FLpFjWLVyI2dTLe7KHM0FvnczVZmT9wGJV8rUMjgjV9oG552DAev9exPGnj4E=;"; // Add the collectionId and resourceToken for read/write on the collection

var collectionUrl = "dbs/Pa0wAA==/colls/Pa0wAKPRZQA=/"; // Add the collection self-link

var client = DocumentDB.createClient(host, {
  resourceTokens: resourceTokens
});

var documentDefinition = {
  id: "Hello world document",
  content: "Hello World!"
};

client.createDocument(collectionUrl, documentDefinition, function(err, createdDocument) {
  if (err) {
    throw err;
  }

  console.log('result', createdDocument);
});

如果您正在构建 Node.js 应用程序 - 我强烈建议您查看 Node.js 客户端:https ://github.com/Azure/azure-documentdb-node/

DocumentDB JS 客户端并不是最直观的 SDK。围绕这个 SDK 的开发体验是我们正在努力改进的地方。如果您愿意讨论您的用例/场景(或者甚至想要一些一般性帮助) - 请通过以下方式与我联系andrl {at} microsoft.com

于 2015-02-17T02:39:29.077 回答
1

不知道你是否还需要帮助,但是由于aliuy没有过多地谈到如何获得资源令牌,我想补充他的答案。

简单来说,如果你使用 Javascript SDK 进行“客户端”开发,你将无法使用 SDK 生成资源令牌,因为你需要使用主密钥来获取资源令牌,但是客户端Javascript SDK不支持通过主密钥进行身份验证。

因此,您将需要使用其他 SDK(例如 Node.js、.NET 等)来创建用户,然后使用该用户为特定资源创建权限。

不幸的是,使用这种方法,即使您的应用程序是严格的客户端(例如,Metro HTML5/JS 应用程序),您也需要一个中间层来授予对您的应用程序的访问权限。

但是,如果(一个 BIG IF)您的应用程序将主要由您信任主密钥的人使用,您可以轻松地将主密钥身份验证添加到客户端 Javascript SDK。我不会鼓励人们这样做,所以除非你需要,否则我不会在这里发布工作代码。但这里有一个指针——您将需要一个库来创建签名,例如 Crypto.JS。

于 2015-03-18T06:34:42.700 回答
0

你应该看看DoQmentDB模块。
它是基于但更直观(mongodb 样式/流)的包装器DocumentDB,支持钩子、模式、原子事务和查询/操作。

例子:

// Pass connection and database-name, if `test` is not exist it will create one.
var db = new DoQmentDB(connection, 'test');
// Create a CollectionManager, if `users` is not exist it will create one.
var users = db.use('users');

// Each http function returns a `Promise` with two specific methods: success and error.
users.create({ name: 'Ariel M.' })
  .then(console.log);

users.update({ name: 'Ariel', admin: true }, { admin: false })
  .then(console.log);

users.findAndRemove({ isAdmin: false })
  .then(console.log);

于 2015-02-22T22:29:08.863 回答