Node.js 环境集成

更新时间: 2025/01/10 15:31:51

网易云信 IM SDK(NetEase Instant Messaging SDK,NIM SDK)为 Node.js 应用,提供完善的即时通信功能开发能力,屏蔽其内部复杂细节,对外提供较为简洁的 API 接口,方便您快速集成即时通信功能。通过 NIM SDK,可以将即时通讯应用业务场景推广到拥有 Node.js 环境的服务端,充分运用到 服务器即客户端、客户端即服务器 的使用场景中,诸如 Linux 工业控制、聊天机器人、数据管道、单机监控、规模化数据分析等。

本文介绍如何快速将 NIM SDK 集成到您的 Node.js 项目中。

注意事项

由于浏览器环境的全局变量为 window,而 Node.js 的全局变量为 global,为了做到兼容及适配,NIM SDK 会模拟(mock)一些属性,诸如 navigatorlocationWebSocket 等对象到 global 中,一般不影响您的正常使用。

环境要求

Node.js v12 及以上版本。

第一步:安装 SDK

通过如下 NPM 命令安装最新版 SDK。

npm install @yxim/nim-web-sdk@latest

第二步:选择文件

使用 require 方式引入您所需 SDK 文件。以下示例为引入同时包含 IM 对象和聊天室对象的 SDK 文件:

JavaScriptconst SDK = require('@yxim/nim-web-sdk/dist/SDK/NIM_Web_SDK_nodejs')
const nim = SDK.NIM.getInstance({
    // ...
})

SDK 所包含的文件如下:

dist/SDK
├── NIM_Web_NIM_nodejs.js       // 提供常规 IM 功能,包括单聊、会话、群聊等,Node.js 适配版(UMD 格式)
├── NIM_Web_Chatroom_nodejs.js  // 提供聊天室功能,Node.js 适配版 UMD 格式
├── NIM_Web_SDK_nodejs.js       // 提供常规 IM 和聊天室功能,Node.js 适配版 UMD 格式

引入 SDK 文件时,请勿同时引入以下两种文件组合

  • 勿同时引入 NIM_Web_SDK_nodejs_vX.X.X.jsNIM_Web_Chatroom_nodejs_v.X.X.X.js
  • 勿同时引入 NIM_Web_SDK_nodejs_vX.X.X.jsNIM_Web_NIM_nodejs_vX.X.X.js

请根据下表的说明引入您所需的 SDK 文件。初始化不同 SDK 文件,需调用不同的 SDK API。

业务需求 需引入的文件 初始化实例的接口
常规 IM(单聊、群聊等) NIM_Web_NIM_nodejs_vX.X.X.js NIM.getInstance
聊天室 NIM_Web_Chatroom_nodejs_vX.X.X.js Chatroom.getInstance
常规 IM 和聊天室 NIM_Web_SDK_nodejs_vX.X.X.js

第三步:初始化

完成 SDK 集成后,您需要 初始化并登录 IM

第四步:使用 SDK

实例调用方式

集成 NIM SDK 后,所有 SDK 能力均通过 NIM SDK 单例调用,例如:

JavaScript  // 引入 SDK 类的引用以后,获取 SDK 对象实例
  var nim = SDK.NIM.getInstance({
    debug: true,
    appKey: appKey,
    account: account,
    token: token,
    // ...
  });

以发送点对点消息为例:

JavaScript  var msg = nim.sendText({
    scene: 'p2p',
    to: account,
    text: 'hello',
    done: function sendMsgDone (error, msg) {
      // ...
    }
  });

事件通知方式

NIM SDK 通过回调(callback)和委托(delegate)两种方式通知上层 API 调用结果,均 只在主线程触发

  • 一般回调接口直接反映在相应接口的 done 参数上,调用时设置即可

  • 委托则需要您在合适时机,在 初始化异步监听函数 上进行处理。

    JavaScript// 委托通知示例
    var nim = NIM.getInstance({
        // ... 此处省略其他配置
        onmsg: function (msg) {
        // 此处为委托消息事件,消息发送成功后,成功消息也在此处处理
        }
    });
    
    // 回调通知示例
    var msg = nim.sendText({
        scene: 'p2p',
        to: account,
        text: 'hello',
        done: function sendMsgDone (error, msg) {
        // 此处为回调消息事件,仅仅通知开发者,消息是否发送成功
        }
    });
    

本地数据库

由于服务器环境的存储系统具有多样性,SDK 不在内部再对数据库进行集成,您可以自行使用诸如 mysql、oracle、ms-sql、sqlite、mongodb、hbase 等等数据存储服务。

使用 Node.js SDK 的同时,您依然可以调用 服务端接口,直接对服务器数据进行操作。

发送文件

Node.js 的上传接口请使用 filePath 参数:

JavaScript  nim.previewFile({
    type: 'image',
    maxSize: maxSize,
    commonUpload: true,
    filePath: options.filePath,
    uploadprogress(obj) {
      // ...
    },
    done: (error, file) => {
      const { scene, to } = options;
      if (!error) {
        constObj.nim.sendFile({
          type: 'image',
          scene,
          to,
          file,
          done: (err, msg) => {
            if (err) {
              return;
            }
            this.appendMsg(msg);
          },
        });
      }
    },
  });

日志记录

SDK 支持使用第三方日志记录工具,辅助您在服务器端使用文件 log 的方式记录日志,以下以 npm-log4js 3.* 第三方库为例,进行 SDK 的日志记录。

  • 初始化 log4js

    JavaScriptconst log4js = require('log4js');
    log4js.configure({
        replaceConsole: true,
        appenders: { nimlog: { type: 'file', filename: 'nim-debug.log' } },
        categories: { default: { appenders: ['nimlog'], level: 'ALL' } }
    });
    const logger = log4js.getLogger('nimlog');
    
  • IM 及聊天室部分日志插件引入方式:

    JavaScriptglobal.nim = NIM.getInstance({
        debug: true,
        logFunc: logger,
        // ...
    })
    
此文档是否对你有帮助?
有帮助
去反馈
  • 注意事项
  • 环境要求
  • 第一步:安装 SDK
  • 第二步:选择文件
  • 第三步:初始化
  • 第四步:使用 SDK
  • 实例调用方式
  • 事件通知方式
  • 本地数据库
  • 发送文件
  • 日志记录