尽管 Cassandra 的新版用户友好程度有了很大提升,但如何将它与 Node.js 集成仍然是相对复杂的事情。一种解决方案是使用 npm 包 justo.plugin.cassandra。这篇文章将介绍该包的使用方法,包括安装、配置、读写操作及其它相关实用功能。
安装
安装该包最简单的方法是使用 npm:
npm install justo.plugin.cassandra
或者,将该包添加到项目的 package.json 文件:
{ "dependencies": { "justo.plugin.cassandra": "x.x.x" } }
再用 npm 安装即可。
配置
在开始使用之前,需要配置连接到 Cassandra 节点的 IP 地址、端口、身份验证信息等属性。在项目中创建一个文件 config.js,然后在该文件中添加以下代码:
module.exports = { cassandra: { contactPoints: ['localhost'], keyspace: 'my_keyspace', authProvider: new cassandra.auth.PlainTextAuthProvider('my_user', 'my_password') } }
其中,contactPoints 是一个包含一个或多个 Cassandra 节点的地址列表,keyspace 是您要使用的数据库名称,authProvider 包含身份验证用户名和密码(如果适用)。
连接到 Cassandra
在配置完成后,您需要连接到 Cassandra。可以使用以下代码:
-- -------------------- ---- ------- ----- --------- - ---------------------------- ----- ------ - -------------------- ----- ------ - --- ----------------------------------- -------------------- -- - -- ----- - ----------------- ------- - ---------------------- -- ------------ ---
创建一个新的 cassandra.Client 实例,并通过 config.cassandra 对其进行配置。然后,使用 connect() 方法连接到 Cassandra。如果连接遇到错误,将打印错误消息。如果成功连接,则打印“Connected to Cassandra”。
读写数据
在连接到 Cassandra 后,您可以使用相应的命令进行读写。假设您已经在 Cassandra 中创建了以下表格:
CREATE TABLE my_keyspace.users ( id UUID PRIMARY KEY, name TEXT, email TEXT )
插入数据
要将数据插入该表中,请使用以下代码:
-- -------------------- ---- ------- ----- -- - ----------------------- ----- ----- - ------- ---- ----- ---- ----- ------ ------ --- -- ---- ----- ------ - ---- ----- ----- ------------------------ --------------------- ------- - -------- ---- -- ----- ------- -- - -- ----- - ----------------- ------- - --------------------- ------- ---
使用 cassandra.types.uuid() 生成一个新的 UUID 来作为 id,然后将数据插入到表格中。使用 execute() 方法执行查询语句,params 是一个包含对应于查询占位符的参数的数组,{ prepare: true } 设置准备查询以避免 SQL 注入。如果操作成功,打印“Inserted data”。
查询数据
以下是如何查询数据:
-- -------------------- ---- ------- ----- ----- - ------- - ---- ----- ----- ---- - --- ----- ------ - ------ ------ --------------------- ------- - -------- ---- -- ----- ------- -- - -- ----- - ----------------- ------- - ----- ---- - ------------ ------------------ -- - ------------------ -------- -------------------- ---------- --------------------- ----------- --- ---
使用查询语句获取所有名为“John Doe”的行,并遍历返回的结果。
更新数据
以下是如何更新数据:
-- -------------------- ---- ------- ----- ----- - ------- ----- --- ---- - - ----- -- - --- ----- ------ - ------ ----- ---- --------------------- ------- - -------- ---- -- ----- ------- -- - -- ----- - ----------------- ------- - -------------------- ------- ---
将 id 作为输入参数,使用更新语句将名字从“John Doe”改为“Jane Doe”。
删除数据
以下是如何删除数据:
-- -------------------- ---- ------- ----- ----- - ------- ---- ----- ----- -- - --- ----- ------ - ----- --------------------- ------- - -------- ---- -- ----- ------- -- - -- ----- - ----------------- ------- - -------------------- ------- ---
将 id 作为输入参数,使用删除语句从表格中删除对应的行。
其它实用功能
justo.plugin.cassandra 包还包含许多其它实用的功能。以下是其中一些:
执行多个查询
以下是如何执行多个查询:
-- -------------------- ---- ------- ----- ------- - - - ------ ------- ---- ----- ---- ----- ------ ------ --- -- ---- ------- ------------------------ ----- ----- ----------------------- -- - ------ ------- ----- --- ---- - - ----- -- - --- ------- ------ ----- --- -- - ------ ------- ---- ----- ----- -- - --- ------- ---- - -- --------------------- - -------- ---- -- ----- ------- -- - -- ----- - ----------------- ------- - --------------------- -------- ---
使用 batch() 方法执行包含多个查询的数组 queries。
使用 Promise
以下是如何使用 Promise:
-- -------------------- ---- ------- ----- ----- - ------- - ---- ----- ----- ---- - --- ----- ------ - ------ ------ --------------------- ------- - -------- ---- -- -------------- -- - ----- ---- - ------------ ------------------ -- - ------------------ -------- -------------------- ---------- --------------------- ----------- --- -- ------------ -- - ----------------- ---
使用 Promise 对象替代回调。注意,如果使用 Promise,则不需要使用回调函数。只需在查询语句后面添加 .then() 方法和 .catch() 方法。
结论
正如您所见,npm 包 justo.plugin.cassandra 的使用非常简单,同时能够执行许多有用的操作。借助该包,您可以轻松地将 Cassandra 集成到 Node.js 项目中,并与数据库进行交互。如果您刚开始使用 Cassandra,该包是学习和探索的完美起点。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005680f81e8991b448e430b