Node.js 环境集成

更新时间: 2024/03/14 18:45:33

网易云信 IM SDK(NetEase Instant Messaging SDK,NIM SDK(Node.js) ) 为 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

集成步骤

  1. 通过如下 npm 命令安装最新版 SDK。

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

    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  集成包 Node.js 适配版 UMD 格式
    
  2. 使用 require 方式引入您所需 SDK 文件。

    具体如何根据业务需求选择 SDK 文件及相关注意事项,请参见下文的SDK 文件选择


    以下示例为引入同时包含 IM 对象和聊天室对象的 SDK 文件:

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

SDK文件选择

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

业务需求 需引入的模块 初始化方法
仅需常规 IM (单聊、群聊等) NIM_Web_NIM_nodejs_vX.X.X.js 通过NIM.getInstance方法初始化 IM 实例
仅需聊天室 NIM_Web_Chatroom_nodejs_vX.X.X.js 通过Chatroom.getInstance方法初始化聊天室实例
常规 IM 和聊天室都需要 NIM_Web_SDK_nodejs_vX.X.X.js

引入 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 集成后,需初始化并登录 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 通过两种方式通知上层 API 调用结果:回调(callback)和委托 (delegate),两种方式都只在主线程触发

  • 一般回调接口直接反映在相应接口的 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等等数据存储服务。 使用nodejs sdk的同时,用户依然可以使用网易云信的server-api所提供的能力,直接对服务器数据进行操作,事半功倍。

文件发送

Nodejs的上传接口请使用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:
javascript  const 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及聊天室部分日志插件引入方式:
javascript  global.nim = NIM.getInstance({
    debug: true,
    logFunc: logger,
    // ...
  })
此文档是否对你有帮助?
有帮助
去反馈
  • 开发环境要求
  • 集成 SDK
  • 集成步骤
  • SDK文件选择
  • 后续步骤
  • 相关信息
  • SDK 使用须知
  • 实例调用方式
  • 事件通知方式
  • 本地数据库
  • 文件发送
  • 日志记录