超级实用!详解Node.js中的mongodb模块和socket.io模块

news2024/10/7 15:23:16

在这里插入图片描述

文章目录

  • 9. `mongodb` 模块
    • 安装和引入
    • 连接数据库
    • 操作集合
      • 获取集合
      • 插入文档
      • 查询文档
      • 更新文档
      • 删除文档
    • 关闭连接
  • 10. `socket.io` 模块
    • 安装和引入
    • 监听连接事件
    • 监听自定义事件
      • 在服务器端监听事件
      • 在客户端触发事件
    • 广播消息
      • 在服务器端广播消息
      • 在客户端监听广播消息
    • 断开连接
    • 完整示例

9. mongodb 模块

用于连接和操作 MongoDB 数据库。

const MongoClient = require('mongodb').MongoClient;

mongodb 模块是 Node.js 中用于与 MongoDB 数据库进行交互的官方驱动程序。它提供了一组功能丰富的 API,使我们能够在 Node.js 应用程序中连接、操作和管理 MongoDB 数据库。

下面我将详细介绍 mongodb 模块的一些常用功能和使用方法:

安装和引入

首先,需要通过 npm 安装 mongodb 模块。

npm install mongodb

然后,在你的 Node.js 代码中引入 mongodb 模块。

const { MongoClient } = require('mongodb');

连接数据库

使用 MongoClient 对象来连接 MongoDB 数据库。

const uri = 'mongodb://localhost:27017';
const client = new MongoClient(uri);

async function connect() {
  try {
    await client.connect();
    console.log('Connected to the database');
  } catch (error) {
    console.error('Failed to connect to the database:', error);
  }
}

connect();

上述代码中,我们使用 MongoClient 对象创建了一个客户端,并使用 connect 方法连接到 MongoDB 数据库。

操作集合

一旦连接到数据库,我们可以操作集合(Collection)来进行数据的增删改查。

获取集合

const db = client.db('mydb');
const collection = db.collection('mycollection');

上述代码中,我们获取了名为 mycollection 的集合对象,用于后续的操作。

插入文档

const insertResult = await collection.insertOne({ name: 'John', age: 30 });
console.log('Inserted document:', insertResult.insertedId);

上述代码中,我们使用 insertOne 方法向集合中插入一条文档,并通过返回结果获取插入的文档的 _id 值。

查询文档

const query = { age: { $gt: 25 } };
const cursor = collection.find(query);

while (await cursor.hasNext()) {
  const document = await cursor.next();
  console.log(document);
}

上述代码中,我们使用 find 方法查询满足条件的文档,并通过游标(Cursor)进行遍历并打印每个文档。

更新文档

const filter = { name: 'John' };
const update = { $set: { age: 35 } };

const updateResult = await collection.updateOne(filter, update);
console.log('Updated document count:', updateResult.modifiedCount);

上述代码中,我们使用 updateOne 方法更新满足条件的文档,并通过返回结果获取更新的文档数量。

删除文档

const filter = { name: 'John' };

const deleteResult = await collection.deleteOne(filter);
console.log('Deleted document count:', deleteResult.deletedCount);

上述代码中,我们使用 deleteOne 方法删除满足条件的文档,并通过返回结果获取删除的文档数量。

关闭连接

在使用完数据库之后,需要关闭数据库连接。

async function close() {
  try {
    await client.close();
    console.log('Connection closed');
  } catch (error) {
    console.error('Failed to close the connection:', error);
  }
}

close();

上述代码中,我们使用 close 方法关闭数据库连接。

除了上述介绍的功能之外,mongodb 模块还提供了更多的 API 和功能,例如聚合管道(Aggregation Pipeline)、索引管理、事务处理等。你可以根据自己的需求查阅官方文档来了解更多详细信息。

需要注意的是,实际使用中,我们通常会在连接数据库、操作集合等步骤中添加适当的错误处理和异常捕捉,以确保代码的健壮性和可靠性。

10. socket.io 模块

用于构建实时的 WebSocket 应用程序,支持双向通信。

const io = require('socket.io');

socket.io 是一个流行的用于实现实时、双向通信的 JavaScript 库。它提供了一种简单而强大的方式,使得服务器和客户端可以通过 WebSocket 或轮询等技术进行通信。在本次讲解中,我将详细介绍 socket.io 模块的主要功能和使用方法。

安装和引入

首先,需要通过 npm 安装 socket.io 模块。

npm install socket.io

然后,在你的 Node.js 代码中引入 socket.io 模块,并创建一个 socket.io 服务器对象。

const http = require('http');
const io = require('socket.io');

// 创建 HTTP 服务器
const server = http.createServer();

// 创建 socket.io 服务器
const socketServer = io(server);

上述代码中,我们使用 http 模块创建了一个 HTTP 服务器,并使用 io 函数创建了一个 socket.io 服务器,将其与 HTTP 服务器关联起来。

监听连接事件

socket.io 使用事件驱动的模型进行通信。服务器和客户端之间的通信通过触发和监听不同的事件来实现。首先,我们需要监听连接事件,当客户端连接到服务器时触发该事件。

socketServer.on('connection', (socket) => {
  console.log('A new client connected');

  // 在这里可以处理客户端的其他事件
});

上述代码中,我们使用 on 方法监听 connection 事件,并在回调函数中处理连接事件。当有新的客户端连接到服务器时,回调函数会被触发,并传入一个 socket 对象,该对象代表与客户端之间的连接。

监听自定义事件

一旦建立了连接,我们可以通过触发和监听自定义事件来在服务器和客户端之间进行通信。

在服务器端监听事件

在服务器端,我们可以使用 on 方法来监听自定义事件。

socket.on('event_name', (data) => {
  console.log('Received data from client:', data);

  // 在这里可以处理和回复客户端的数据
});

上述代码中,我们使用 on 方法监听名为 event_name 的自定义事件,并在回调函数中处理接收到的数据。

在客户端触发事件

在客户端,我们可以使用 emit 方法来触发自定义事件,并传递数据给服务器。

socket.emit('event_name', data);

上述代码中,我们使用 emit 方法触发名为 event_name 的自定义事件,并将 data 数据发送给服务器。

广播消息

socket.io 还提供了广播功能,可以向除了当前连接以外的所有客户端发送消息。

在服务器端广播消息

在服务器端,我们可以使用 broadcast 属性来广播消息。

socket.broadcast.emit('event_name', data);

上述代码中,我们使用 broadcast.emit 方法广播名为 event_name 的消息,并将 data 数据发送给除了当前连接以外的所有客户端。

在客户端监听广播消息

在客户端,我们可以使用 on 方法监听服务器端广播的消息。

socket.on('event_name', (data) => {
  console.log('Received broadcast data:', data);

  // 在这里可以处理服务器端广播的数据
});

上述代码中,我们使用 on 方法监听名为 event_name 的广播事件,并在回调函数中处理接收到的数据。

断开连接

当客户端断开与服务器的连接时,会触发 disconnect 事件。

socket.on('disconnect', () => {
  console.log('Client disconnected');

  // 在这里可以做一些清理和处理工作
});

上述代码中,我们使用 on 方法监听 disconnect 事件,并在回调函数中处理客户端断开连接的情况。

完整示例

下面是一个使用 socket.io 实现简单聊天室的完整示例。

const http = require('http');
const io = require('socket.io');

const server = http.createServer();
const socketServer = io(server);

socketServer.on('connection', (socket) => {
  console.log('A new client connected');

  socket.on('chat_message', (message) => {
    console.log('Received message:', message);
    socket.broadcast.emit('chat_message', message);
  });

  socket.on('disconnect', () => {
    console.log('Client disconnected');
  });
});

server.listen(3000, () => {
  console.log('Server is running on port 3000');
});

上述示例中,服务器在端口 3000 上监听连接请求,并在连接建立后处理 chat_message 事件来实现聊天室的功能。当客户端发送消息时,服务器会将消息广播给所有其他客户端。

以上就是对 socket.io 模块的详细讲解,希望能对你有所帮助。socket.io 还提供了很多高级功能和配置选项,你可以参考官方文档以获取更多信息。
以上列举的是 Node.js 中的十大常用模块,每个模块都有其特定的功能和用途,可以根据具体需求选择和使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/704111.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WPF 零基础入门笔记(3):数据绑定详解

文章目录 文章合集数据绑定数据绑定实战事件通知型数据驱动,双向绑定资源绑定数据源绑定全局数据源后端和前端绑定问题继承事件通知,刷新数据事件通知强制刷新(无效)结论: 文章合集 WPF基础知识博客专栏 WPF微软文档 …

365天深度学习训练营-第T4周:猴痘病识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 我的环境: 语言环境:Python3.10.7编译器:VScode深度学习环境:TensorFlow2 一、前期工作: 1、导入…

小白开酒吧前要知道的几个知识(一)

第一、团队建设如果决定开酒吧,除非你的资金充裕,否则都该寻找合伙人。共同的目标会让你和合伙人之间合作的更愉快,所以合伙人应该选择善于沟通交流的。选定靠谱的合伙人之后,应该建立一个大致的团队体系,在团队内做好…

CAD怎么转成清晰的图片?分享几种好用的转换方法

CAD文件通常需要特定软件才能打开和编辑,而将其转换为图片格式可以使其更加普遍地被浏览和共享。此外,由于图片通常具有较小的文件大小,因此转换为图片格式可以更快地上传和下载,可以方便地用于演示和分享。那么我们怎么把CAD文件…

Python进行单元测试是怎么做的?

前言 在我的日常工作中,我是一名专业程序员。我使用c、c#和Javascript。我是一个开发团队的一员,他们使用单元测试来验证我们的代码是否按照它应该的方式工作。 在本文中,我将通过讨论以下主题来研究如何使用Python创建单元测试。 单元测试…

一文详解Mac搭建Vulkan开发环境

本文为Vukan系列的第二篇文章,上一篇文章对Vulkan进行了简单介绍,并对其与OpenGL的优劣势进行了比较,为应用开发人员在选择图形API方面提供了建议。下边开始本文的主要内容,详细介绍在Mac操作系统中,如何搭建Vulkan开发…

力扣 98. 验证二叉搜索树

题目来源:https://leetcode.cn/problems/validate-binary-search-tree/description/ C题解1:中序遍历,递归法。获取数组,如果是递增则返回true,否则返回false。 class Solution { public:void zhongxu(TreeNode* node…

用vue3+elementplus做的一个滚动菜单栏的组件

目录 起因概览设计及解决思路1.滚动条竖起来2.绑定菜单3.吸附优化 组件全部代码 起因 在elementplus中看到了滚动条绑定了slider,但是这个感觉很不实用,在底部,而且横向滚动,最常见的应该是那种固定在左上角的带着菜单的滚动条&a…

MySQL总结(索引,Explain,MVCC和隔离级别,锁)

文章目录 一、索引1.索引构成2.如何查找3.最左匹配原则4.覆盖索引5.减少冗余索引和重复索引1.冗余索引2.重复索引 6.索引适用情况和注意事项1.适用情况2.注意事项 二、Explain执行计划1.Explain语句 三、隔离级别与MVCC1.事前准备2.四个事务并发的问题1.脏写2.脏读3.不可重复读…

(有10个维度为(256,128,130)的tensor,计算10个tensor两两之间的相似性以及差异性,并将相似性和差异性可视化。

有10个维度为(256,128,130)的tensor,计算10个tensor两两之间的相似性以及差异性,并将相似性和差异性可视化。 问题描述解决办法 问题描述 有10个维度为(256,128,130)的tensor,计算10个tensor两…

Java基础复习第二天

目录 一、字符串 二、不可变的好处 三、String, StringBuffer and StringBuilder的区别 四、字符串池 五、新字符串(“abc”) 一、字符串 String 被声明为 final,因此它不可被继承。(Integer 等包装类也不能被继承…

前端-基础选择器

从今天开始学习下前端的知识-查漏补缺&#xff0c;仅为自己学习记录使用 基础选择器 标签选择器类选择器id 选择器通配符选择器 标签选择器 标签名 {属性名&#xff1a;属性值; }<style>p {color: red;} </style><p>你好&#xff0c;世界</p>类选择…

Unity URP 获取Camera Stack

URP 获取Camera Stack 1.using UnityEngine.Rendering.Universal; 2.Camera.main.GetUniversalAdditionalCameraData().cameraStack

【日志加载 log4j】

日志 笔记记录 1. 日志介绍2. 日志体系结构3.Log4j开发流程4.Log4j组成4.1 Loggers 记录器4.2 Appenders 输出源4.3 Layouts 布局5. 配置文件 log4j.properties 1. 日志介绍 2. 日志体系结构 3.Log4j开发流程 1.引入依赖<dependency><groupId>log4j</groupId>…

爬虫正常用哪种代理比较好?

在进行网络爬虫时&#xff0c;使用代理可以带来许多好处&#xff0c;包括提高请求的可靠性、防止IP封锁、实现匿名浏览等。以下是一些常见的代理类型&#xff0c;你可以根据需要选择最适合的&#xff1a; 免费代理&#xff1a;免费代理可能数量众多&#xff0c;但质量和稳定性参…

Python获取某品牌加盟数据采集实现可视化数据分析

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 开发环境 : python 3.8 运行代码 pycharm 2022.3 辅助敲代码 jupyter 数据分析使用软件 模块使用 &#xff1a; requests 数据请求模块 需要安装 parsel 数据解析模块 csv pandas pyecharts 第三方模块安装&#xf…

基于Java开发的企业人力资源管理系统(ehr系统)

一、项目介绍 一款全源码可二开&#xff0c;可基于云部署、私有部署的企业级数字化人力资源管理系统&#xff0c;涵盖了招聘、人事、考勤、绩效、社保、酬薪六大模块&#xff0c;解决了从人事招聘到酬薪计算的全周期人力资源管理&#xff0c;符合当下大中小型企业组织架构管理…

BOLD信号的生理建模及其对有效连接的影响

导读 本文提供了BOLD信号生理过程的总体概述(即生成生物物理模型)&#xff0c;包括它们在生理信息动态因果模型(P-DCM)框架下的时间过程特征。BOLD信号主要由顺磁性脱氧血红蛋白的变化决定&#xff0c;而顺磁性脱氧血红蛋白的变化是氧代谢、脑血流量和脑血容量变化共同作用的结…

测试工程师首chatGPT,编写python读取xmind测试用例chatgtp+python+xmind

背景 有用xmind写测试用例的吧&#xff0c;统计一个xmind的条&#xff0c;需要花大量的时间&#xff0c;还有要统计有多少条冒烟的&#xff0c;多少条不通过的&#xff0c;还有通过的条数。 需求 快速使用python&#xff0c;写一个简单的脚本&#xff0c;统计所有xmind节点&…

【IP地址与子网掩码】网络杂谈(19)之IP地址分类与子网掩码的概念

涉及知识点 什么是子网掩码&#xff0c;IP地址的分类&#xff0c;子网掩码的概念&#xff0c;深入了解子网掩码与IP地址,A类&#xff0c;B类&#xff0c;C类&#xff0c;D类&#xff0c;E类ip地址范围。 原创于&#xff1a;CSDN博主-《拄杖盲学轻声码》&#xff0c;更多内容可…