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 一些属性,诸如 navigator
、location
、WebSocket
等对象到global
中,一般不影响用户正常使用。
开发环境要求
Node.js v12 及以上版本。
集成 SDK
集成步骤
-
通过如下 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 格式
-
使用 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.js
和NIM_Web_Chatroom_nodejs_v.X.X.X.js
NIM_Web_SDK_nodejs_vX.X.X.js
和NIM_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,
// ...
})