You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js集成Pusher实现实时功能启动报错求助

Node.js Pusher实时功能报错解决

错误信息

node:internal/process/promises:288
            triggerUncaughtException(err, true /* fromPromise */);
            ^
Error
    at new RequestError (C:\Users\Admin\Documents\GitHub\Project\Book-Social-Network\backend\node_modules\pusher\lib\errors.js:13:16)
    at C:\Users\Admin\Documents\GitHub\Project\Book-Social-Network\backend\node_modules\pusher\lib\requests.js:74:13
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {       
  name: 'PusherRequestError',
  message: 'Request failed with an error',
  url: 'https://api-book-social.pusher.com/apps/1566147/events?auth_key=8856b27e23cd9a64d102&auth_timestamp=1679061377&auth_version=1.0&body_md5=4ee5707c207779744a1024fce29c74ce&auth_signature=c6363acc371e84e29d21b54db2a367dd3d3510cb986710a90c7c855c259d0854',
  error: FetchError: request to https://api-book-social.pusher.com/apps/1566147/events?auth_key=8856b27e23cd9a64d102&auth_timestamp=1679061377&auth_version=1.0&body_md5=4ee5707c207779744a1024fce29c74ce&auth_signature=c6363acc371e84e29d21b54db2a367dd3d3510cb986710a90c7c855c259d0854 failed, reason: getaddrinfo ENOTFOUND api-book-social.pusher.com
      at ClientRequest.<anonymous> (C:\Users\Admin\Documents\GitHub\Project\Book-Social-Network\backend\node_modules\node-fetch\lib\index.js:1505:11)
      at ClientRequest.emit (node:events:513:28)
      at TLSSocket.socketErrorListener (node:_http_client:481:9)
      at TLSSocket.emit (node:events:513:28)
      at emitErrorNT (node:internal/streams/destroy:151:8)
      at emitErrorCloseNT (node:internal/streams/destroy:116:3)
      at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {    
    type: 'system',
    errno: 'ENOTFOUND',
    code: 'ENOTFOUND'
  },
  status: undefined,
  body: undefined
}

Node.js v18.6.0
[nodemon] app crashed - waiting for file changes before starting...

代码片段

const pusher = new Pusher({
  appId: process.env.PUSHER_APPID,
  key: process.env.PUSHER_KEY,
  secret: process.env.PUSHER_SECRET, 
  cluster: process.env.PUSHER_CLUSTER,
  useTLS: true,
});

const db = mongoose.connection;

db.once('open',  () => {
  const msgCollection = db.collection('chats');
  const msgChangeStream = msgCollection.watch();

   msgChangeStream.on('change', (change) => {  
    if (change.operationType === 'insert') {
      const messageDetails = change.fullDocument; 
      pusher.trigger('messages', 'insert', {
        content: messageDetails.content,
        users: messageDetails.users, 
        sender: messageDetails.sender,  
      }); 
    } else {
      console.log('Error Trigger Pusher');
    }
  });

问题分析

核心错误是getaddrinfo ENOTFOUND api-book-social.pusher.com,说明无法解析Pusher的API域名。正常Pusher API域名格式为api-<集群标识>.pusher.com(如api-us2.pusher.com),当前请求的域名不符合规范,大概率是PUSHER_CLUSTER环境变量配置错误。

解决步骤

  1. 验证Pusher集群配置:登录Pusher控制台,找到对应应用,查看正确的集群标识(如mt1、us2、eu等),确保process.env.PUSHER_CLUSTER的值与控制台一致。
  2. 检查环境变量:确认项目环境变量文件(如.env)中PUSHER_CLUSTER未被误写为自定义字符串(比如项目名book-social)。
  3. 添加错误捕获:修改代码给pusher.trigger增加异常捕获,避免单个触发失败导致服务崩溃:
msgChangeStream.on('change', async (change) => {  
  if (change.operationType === 'insert') {
    const messageDetails = change.fullDocument; 
    try {
      await pusher.trigger('messages', 'insert', {
        content: messageDetails.content,
        users: messageDetails.users, 
        sender: messageDetails.sender,  
      });
    } catch (err) {
      console.error('Pusher触发失败:', err);
    }
  } else {
    console.log('非插入操作,跳过Pusher触发');
  }
});
  1. 测试网络连通性:在终端执行nslookup api-<正确集群>.pusher.com,确认域名可正常解析,排除本地DNS或网络问题。

内容的提问来源于stack exchange,提问作者Huu_Tu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:42:29