发布于 2026-01-06 0 阅读
0

保持冷静,继续使用 Cosmos 和 Node.js 进行编码

保持冷静,继续使用 Cosmos 和 Node.js 进行编码

使用 Cosmos DB SDK 进行编码的感觉真好。没错,我说的是感觉真好。是啊,是啊……它安装快、学习快、执行也快。但最重要的是,感觉真好。

想想你编写代码时那种行云流水的感觉。那种节奏感极佳,所有想法都能流畅地转化为代码,一切都顺畅无比!而这一切的关键在于,我们所编写的 API 必须直观易懂。Cosmos DB SDK 在这方面表现出色。让我们来看看为什么。

我现在想好好玩代码

Cosmos DB SDK 太棒了,用起来感觉超赞。如果你也想体验这种感觉,又不想看这篇文章,想亲自尝试一下——这里有一些入门链接。如果你跳过这篇文章,我可能会哭,但我会挺过来的。

冷静、沉着、镇定的编码

当一切顺利时,编程对我们许多人来说都是一种疗愈。但有时,它就像一群孩子拿着彩弹枪在生日派对上横冲直撞,吵得人头攒动!(嘿,别笑话我!)
我们编写代码时,都清楚自己想要它做什么。例如,最近我想要从数据库中获取一份英雄列表——直接给我,别让我费那么大劲!使用 Cosmos DB SDK,只需一行代码就能轻松实现:

container.items.readAll().toArray()

我有一个存放英雄的容器,里面装着一些物品(我的英雄)。请读取这些物品,并以数组的形式返回。这其实并不难!

Cosmos DB 和 Express Routes

好的,那么这在Node和Express路由处理HTTP请求的上下文中是如何工作的呢?让我们仔细思考一下。

我们首先需要设置数据库。我们会在另一个模块中完成这项工作,这样可以快速搭建模型并导入数据。

接下来我们获取英雄。好的,我们已经有了上面那行代码。这段代码是异步的,所以我们会考虑使用 Promise 或 async/await。这取决于你,所以请谨慎选择。我个人更喜欢使用 async/await,所以我们在这里就用它。下面是我提取结果并将其重命名为 heroes 后的样子。

const { result: heroes } = await  container
      .items
      .readAll()
      .toArray();

最后,如果成功,我们需要将英雄信息连同状态码一起放入响应中。如果失败,则返回失败状态码和错误信息。

这是我为此编写的代码。欢迎借用(用完后请归还,以便其他人也能借用)。

//hero.service.js
const { heroes: container } = require('./config').containers;
async function getHeroes(req, res) {
  try {
    const { result: heroes } = await  container
      .items
      .readAll()
      .toArray();
    res.status(200).json(heroes);
  } catch (error) {
    res.status(500).send(error);
  }
}

太简单了!简直简单到不可思议!我们只写了几行数据库访问代码,然后把它连接到了一个快速路由上。

好的,我们之前为了配置只存了一行代码。我们需要把这行代码写出来,但好消息是配置只需要做一次。这笔固定费用是一次性的,之后你可以根据需要重复使用任意数量的函数。换句话说,我们可以编写函数来获取、添加、发布、删除英雄、反派以及任何我们想要的功能,而只需要在顶部添加一行配置代码即可!

隔离配置

这里有一个模块可以帮助你入门。我喜欢把连接数据库的编码环境配置功能放在一个单独的 Node 模块里。这里有一个模块,我们可以叫它 config.js 或者 giraffe.js。我觉得前者更合适,不过你随意取。

注释解释了这里发生的情况,但我们还是回顾一下。首先,我们引用了 @azure/cosmos npm 包中的 Cosmos 模块。然后,我们设置了密钥、URL 和数据库名称。这样就把所有配置集中在一个地方了。最后,我们实例化 Cosmos 客户端对象并公开容器对象。这些容器对象就是我们将在其他模块中导入的,所以我们可以直接请求容器,一切就能正常运行。没错,就是这么简单。

// config.js
// Get the npm module for Azure's Cosmos
const cosmos = require('@azure/cosmos');
// Identify your database keys and name
const endpoint = process.env.CORE_API_URL;
const masterKey = process.env.CORE_API_KEY;
const dbDefName = 'vikings-db';
// Instantiate the Cosmos client object,
// which is the focal point of interacting with Cosmos
const { CosmosClient } = cosmos;
const client = new CosmosClient({ endpoint, auth: { masterKey } });
// Make it easy to acces the containers
const containers = {
  heroes: client.database(dbDefName).container('heroes'),
  villains: client.database(ddDefName).container('villains')
};
module.exports = { containers };

试试看

您可以自行在自己的应用程序中尝试,或者克隆我的存储库,或者按照文档中的快速入门指南进行操作。

这里有一些链接可以帮助你入门。

本文已同步发布到我的博客。

文章来源:https://dev.to/john_papa/keep-calm-and-keep-coding-with-cosmos-and-nodejs-34ao