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环境变量配置错误。
解决步骤
- 验证Pusher集群配置:登录Pusher控制台,找到对应应用,查看正确的集群标识(如mt1、us2、eu等),确保
process.env.PUSHER_CLUSTER的值与控制台一致。 - 检查环境变量:确认项目环境变量文件(如
.env)中PUSHER_CLUSTER未被误写为自定义字符串(比如项目名book-social)。 - 添加错误捕获:修改代码给
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触发'); } });
- 测试网络连通性:在终端执行
nslookup api-<正确集群>.pusher.com,确认域名可正常解析,排除本地DNS或网络问题。
内容的提问来源于stack exchange,提问作者Huu_Tu
相关产品推荐
相关产品推荐

