【问题标题】:Error while making request: connect ECONNREFUSED发出请求时出错:连接 ECONNREFUSED
【发布时间】:2021-12-05 14:11:40
【问题描述】:

我有一个每分钟运行一次的发布订阅云功能,用于向用户发送推送通知

export const sendScheduledNotifications = functions
  .region(REGION)
  .runWith({
    timeoutSeconds: 540,
  })
  .pubsub.schedule("* * * * *")
  .timeZone("Europe/Amsterdam")
  .onRun(async (_) => {
    const scheduledNotifications = await getNotificationsAfterDate(Date.now());

    const promises = [];

    if (scheduledNotifications.length > 0) {
      const userIds = scheduledNotifications.map((notification) => notification.userId);
      const users: AppUser[] = userIds.length == 0 ? [] : await userRepo.listUsers("id", "in", userIds);

      for (const notification of scheduledNotifications) {
        const user = users.find((user) => user.id === notification.userId)!;
        promises.push(sendScheduledNotification(notification, user));
      }
    }

    await Promise.all(promises);
  });

但我在 firebase 控制台中不断收到以下错误

sendScheduledNotifications
Error: Error while making request: connect ECONNREFUSED XXX.XXX.XX.XX:XXX. Error code: ECONNREFUSED
    at FirebaseAppError.FirebaseError [as constructor] (/workspace/node_modules/firebase-admin/lib/utils/error.js:44:28)
    at FirebaseAppError.PrefixedFirebaseError [as constructor] (/workspace/node_modules/firebase-admin/lib/utils/error.js:90:28)
    at new FirebaseAppError (/workspace/node_modules/firebase-admin/lib/utils/error.js:125:28)
    at /workspace/node_modules/firebase-admin/lib/utils/api-request.js:211:19
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
    at async sendScheduledNotification (/workspace/lib/index.js:1024:5)
    at async Promise.all (index 0)
    at async /workspace/lib/index.js:973:5 

Al sendScheduledNotification 是这样的

 sendMulticast(tokens: string[], notificationData: PushNotificationData): Promise<admin.messaging.BatchResponse> {
    const data: admin.messaging.MulticastMessage = {
      data: { data: JSON.stringify(notificationData) },
      tokens: tokens,
      android: {
        priority: "high",
      },
      apns: {
        payload: {
          aps: {
            contentAvailable: true,
          },
        },
        headers: {
          "apns-push-type": "background",
          "apns-priority": "5",
          "apns-topic": "io.flutter.plugins.firebase.messaging",
        },
      },
    };

    return this.messagingInstance.sendMulticast(data);
  }

这可能是什么原因?

【问题讨论】:

标签: typescript firebase google-cloud-functions firebase-cloud-messaging


【解决方案1】:

ECONNREFUSED是Node在目标机器或服务当前不是active时引发的错误:

ECONNREFUSED(连接被拒绝):无法建立连接,因为目标机器主动拒绝了它。这通常是由于尝试连接到在外部主机上处于非活动状态的服务造成的。

由于您的功能连接到 iOS/Android 通知服务,您是否确认您是否正确连接到这些服务?此外,您可以验证更多可能的原因。如果您使用函数模拟器进行本地测试,如果emulator is not running.在此回答时,Firebase 云消息传递status 中也存在问题。

您可以检查当状态变回时此错误是否停止显示。最后,根据这个相关的thread,使用 Firebase 的免费 Spark 计划创建的函数不支持出站连接,并且会显示此特定错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-12
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 2017-02-16
    • 2019-10-08
    • 1970-01-01
    相关资源
    最近更新 更多