这篇文章是由同行评审Agbonghama柯林斯和马丁·马丁内斯 。 感谢所有SitePoint的同行评审人员使SitePoint内容达到最佳状态!

Web应用程序最常见的任务之一就是保存数据。 没有存储数据的能力,用户将无法为应用程序自定义其首选项,组织其数据或完成类似的任务。
长期以来,Web一直依赖于关系数据库来保存信息。 例如,在网络上PHP和MySQL之间的LIASON是众所周知的。 但是,并非所有数据库都必须是关联的!
在本文中,我们将重点介绍如何将RethinkDB(一个开源JSON数据库)与Node.js应用程序一起使用。 我们将使用RethinkDB Node.js驱动程序rethinkdbdash连接数据库。

但是在开始之前,让我们先看一下RethinkDB是什么以及我们可能在哪里使用它。

介绍RethinkDB

RethinkDB是为实时Web构建的开源JSON数据库。

官方文档指出:

RethinkDB是第一个为实时Web从头开始构建的开源可扩展JSON数据库。 它通过公开一个令人兴奋的新访问模型来颠覆传统的数据库体系结构–开发人员可以告诉RethinkDB将更新的查询结果实时地连续推送到应用程序,而不必轮询更改。

它提供了每当发生更改时从数据库获取实时更新的功能。

RethinkDB面向需要向连接的客户端发送实时更新的应用程序。 例如,让我们考虑一个使用户能够协同设计计划的应用程序。 当特定用户进行设计更改时,需要将其实时推送到其他连接的客户端,以使设计保持同步。 在这种情况下,可以使用RethinkDB使实时更新成为可能。

弄清楚了RethinkDB有什么用处之后,现在让我们看看如何安装它。

安装Rethinkdb

要在Ubuntu上安装RethinkDB,您需要添加存储库。

source /etc/lsb-release && echo "deb http://download.rethinkdb.com/apt $DISTRIB_CODENAME main" | sudo tee /etc/apt/sources.list.d/rethinkdb.list
wget -qO- http://download.rethinkdb.com/apt/pubkey.gpg | sudo apt-key add -

然后,您必须从新添加的存储库中更新软件包信息并安装RethinkDB。

sudo apt-get update
sudo apt-get install rethinkdb

对于其他操作系统版本,可以按照官方安装说明进行操作 。

完成后,在终端上键入以下命令:

rethinkdb

如果一切都正确安装,则RethinkDB应该启动,并且应该在默认端口28015上运行。管理控制台应该可以从http:// localhost:8080访问 。

安装Node.js客户端Rethinkdbdash

在本教程的简介中,我提到了rethinkdbdash ,我们将使用它与RethinkDB服务器进行交互的Node.js客户端。 它是RethinkDB的高级Node.js驱动程序,具有连接池,对流的支持等。

要安装rethinkdbdash客户端,可以使用npm:

npm install rethinkdbdash

RethinkDB入门

我们将从为演示应用程序创建名为SitePoint的数据库开始。 第一步,创建一个名为NodeRethinkDB的项目文件夹。 然后,在项目目录中创建一个名为app.js的文件。

完成后,将客户端模块导入app.js文件,如下所示:

var r = require('rethinkdbdash')();

上面的语句连接到默认端口地址28015并托管localhost 。 如果您需要其他配置,则可以如下设置:

var r = require('rethinkdbdash')({port: 28015,host: 'localhost'
});

创建数据库

使用前面的语句,我们可以创建一个数据库。 这是通过使用dbCreate方法完成的。

r.dbCreate('SitePoint')
.run()
.then(function(response){console.log(response);
})
.error(function(err){console.log('error occured ', err);
});

如果一切顺利,您将获得如下成功的答复。

{config_changes: [ { new_val: [Object], old_val: null } ],dbs_created: 1
}

如果您查看运行在端口8080上的RethinkDB管理控制台,则应该能够看到新创建的SitePoint数据库。

建立表格

现在,我们将看到如何使用rethinkdbdash客户端在RethinkDB数据库中创建表。
首先,使用客户端建立与数据库的连接。

var r = require('rethinkdbdash')({port: 28015,host: 'localhost',db: 'SitePoint'
});

现在,我们将使用tableCreate方法在数据库中创建表Employee

r.tableCreate('Employee')
.run()
.then(function(response){console.log(response);
})
.error(function(err){console.log('error while creating table ', err);
})

默认情况下,主键是id 。 如果需要,可以在创建表时指定它。

r.tableCreate('Employee',{ primaryKey: 'name' })
.run()
.then(function(response){console.log(response)
})
.error(function(err){console.log('error while creating table ',err)
})

上面的查询返回以下响应:

Creating a pool connected to localhost:28015{config_changes: [ { new_val: [Object], old_val: null } ],tables_created: 1
}

插入资料

要将数据插入Employee表中,我们将使用insert方法。

r.table("Employee")
.insert({name: "Jay",company: "SitePoint"
})
.run()
.then(function(response){console.log('Success ',response);
})
.error(function(err){console.log('error occurred ',err);
})

上面的代码将数据插入Employee表并返回成功消息。 这是上面查询的响应:

Creating a pool connected to localhost:28015Success{deleted: 0,errors: 0,generated_keys: [ 'f64a2bdb-1659-47a9-9bc1-89e8f1ebb2ac' ],inserted: 1,replaced: 0,skipped: 0,unchanged: 0
}

插入查询中值得注意的一件事是,我们没有指定id字段。 如果我们愿意,我们可以做到。 否则,它将具有一个自动生成的唯一标识符值。

从表中选择数据

从表中选择数据非常简单。 我们需要指定表的名称,然后选择数据。

r.table('Employee')
.run()
.then(function(response){console.log(response);
})
.error(function(err){console.log(err);
})

上面的代码段给出了以下输出:

[{EmpId: 'bc95940f-084c-48c5-b9fe-dc0a82f380b6',name: 'Jay',company: 'SitePoint'
}]

从表中选择特定记录

我们使用get方法来获取具有特定主键的记录。 举例来说,如果我们要选择一个EmployeeEmpIdbc95940f-084c-48c5-b9fe-dc0a82f380b6 ,这是我们必须运行查询:

r.table('Employee')
.get('bc95940f-084c-48c5-b9fe-dc0a82f380b6')
.run()
.then(function(response){console.log(response);
})
.error(function(err){console.log(err);
})

上面的查询将返回ID为bc95940f-084c-48c5-b9fe-dc0a82f380b6Employee的详细信息,如下所示:

[{EmpId: 'bc95940f-084c-48c5-b9fe-dc0a82f380b6',name: 'Jay',company: 'SitePoint'
}]

实时推送更新

RethinkDB的最重要功能之一是它能够实时推送更改,从而减少了轮询开销。 从官方文档中,您可以阅读:

开发人员可以告诉RethinkDB实时地不断推送更新的查询结果,而不必轮询更改。

订阅实时提要可以实现推送更新。 例如,我们可以预订Employee表中的任何更改,如下所示:

r.table('Employee')
.changes()
.run()
.then(function(cursor){cursor.each(console.log);
})
.error(function(err){console.log(err);
});

现在,在将记录插入Employee ,在终端中,我们将看到以下日志:

{new_val: {EmpId: '57937293-850b-45af-aeb3-e30d2dfd83a2',company: 'SitePoint',name: 'Raj'},old_val: null
}

上面的日志用于插入语句,因此old_val为null,而new_val具有值。 如果现有记录被更新,我们将同时拥有old_valnew_val

结论

在本教程中,我们已经看到了如何使用RethinkDB与Node.js的应用程序得益于称为RethinkDB Node.js的司机rethinkdbdash 。
如果您想加深话题, 建议您看一下官方文档和Rethink Db JavaScript命令参考 。
您是否曾经使用过其他客户端从Node.js连接到RethinkDB?
在下面的评论中分享您的想法和建议!

From: https://www.sitepoint.com/how-to-use-rethinkdb-with-node-js-applications/

如何在Node.js应用程序中使用RethinkDB相关推荐

  1. rethinkdb_如何在Node.js应用程序中使用RethinkDB

    rethinkdb 这篇文章是由同行评审Agbonghama柯林斯和马丁·马丁内斯 . 感谢所有SitePoint的同行评审员使SitePoint内容达到最佳状态! Web应用程序最常见的任务之一就是 ...

  2. node.js ejs_如何在Node.js应用程序中使用EJS模板

    node.js ejs by Jennifer Bland 詹妮弗·布兰德(Jennifer Bland) 如何在Node.js应用程序中使用EJS模板 (How to use EJS Templat ...

  3. node.js api接口_如何在Node.js API客户端中正常处理故障

    node.js api接口 by Roger Jin 罗杰·金(Roger Jin) 如何在Node.js API客户端中正常处理故障 (How to gracefully handle failur ...

  4. package.json在Node JS应用程序中的重要性

    Before starting Node JS applications development, we should learn some basics and importance of pack ...

  5. 如何在Node.js的httpServer中接收前端发送的arraybuffer数据

    最近使用了protobuf进行数据交互,发送在node.js接收前端的二进制数据出现了数据错误等问题.后来发现思路上面的问题,在req.on('data',()=>{})事件中的处理不适当才引发 ...

  6. electron快捷键_如何在Electron JS应用程序中添加键盘快捷键?

    electron快捷键 Just like in any other native desktop application, keyboard shortcuts save time and make ...

  7. 如何在node.js中发出HTTP POST请求?

    如何在node.js中使用数据发出出站HTTP POST请求? #1楼 如果您使用请求库,这会变得更容易. var request = require('request');request.post( ...

  8. 如何在Docker上构建Node.js应用程序

    Docker has been the latest trending topic over the past couple of years and if you haven't been to s ...

  9. 如何在Node.js中打印堆栈跟踪?

    本文翻译自:How to print a stack trace in Node.js? 有谁知道如何在Node.js中打印堆栈跟踪? #1楼 参考:https://stackoom.com/ques ...

最新文章

  1. 李洪强iOS经典面试题153- 补充
  2. ik分词器 分词原理_Solr7.7.2中文分词器
  3. muduo之Socket和SocketsOps
  4. SQL编程:模糊表关联不求人 --- concat + like就能行
  5. MongoDB整库备份与还原以及单个collection备份、恢复方法
  6. javascript一些常用的代码
  7. 机器学习西瓜书各章详细目录定位
  8. Collections 工具类常见方法
  9. 我的世界进入离开服务器消息,我的世界暂时离开状态修改 人性化设定AFK
  10. 报告客户端Web应用程序中的错误时的安全问题
  11. 随想录(虚拟机实现)
  12. Jenkins+Git+Maven+Nexus+Tomcat
  13. IntelliJ IDEA创建Java-Web项目
  14. java url解码_如何从REST WebService 调用中解码路径参数
  15. CTF知识总结--MISC
  16. 北斗短报文通信原理及功能介绍
  17. 小程序这6个坑绝对不能踩
  18. 二线城市疯狂抢人,技术人才何去何从?
  19. 实战游戏项目管理5-配置管理
  20. 剽悍一只猫---新年分享(2019.12.29)

热门文章

  1. AP5126 DC/DC 平均电流型 降压恒流驱动芯片
  2. egg项目部署及PM2的使用
  3. redefinition of class解决
  4. cmd查看python库命令_怎么用命令查看python的库
  5. CIMISS数据获取流程
  6. 同济大学计算机科学系下设几个专业,同济大学计算机科学与技术工程系简介
  7. win7计算机窗口示意图,win7电脑硬盘怎么分区 win7电脑硬盘分区操作方法介绍
  8. 使用scipy.integrate模块中的quad和dblquad方法分别进行单重积分和多重积分
  9. 谷歌身份验证器 手表_6条使您的三星手表更加Google-y的提示
  10. ICME2021:基于机器学习的VVC帧内编码码率控制