设置 Azure DocumentDB Javascript SDK

setting up Azure DocumentDB Javascript SDK

我正在尝试使用 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/

使上述 JS SDK 代码示例工作的步骤如下:

  • 将您的 DocumentDB 端点放入 (hostendpoint)
  • 放置 collection 资源 ID(这是 _rid,而不是 id, 属性 在 collection JSON 文档中)作为值 (collectionId).
  • 放置权限令牌(您需要创建一个用户并 collection) 的权限作为 (resourceToken).
  • 的值
  • (collectionUrl)
  • 中为 collection 放置 _self link

完整的代码示例应该类似于这样:

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 的开发体验。如果您愿意讨论您的 use-case/scenario(或什至需要一些一般性帮助)- 请通过 andrl {at} microsoft.com 与我联系!

你应该看看 DoQmentDB 模块。
它是 DocumentDB 之上的包装器,但更直观(mongodb style/flow),支持挂钩、模式、原子事务和 queries/operations.

示例:

// 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);

不确定您是否还需要帮助,但是由于aliuy没有过多涉及如何获取资源令牌,所以我想补充一下他的回答。

简单来说,如果您使用Javascript SDK进行"Client Side"开发,您将无法使用SDK生成资源令牌,因为您需要使用master key获取资源令牌,但是客户端JavascriptSDK不支持通过master key[进行认证=25=]。

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

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

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