【问题标题】:Workbox BackgroundSyncPlugin _ Failed Request _ NotificationsWorkbox BackgroundSyncPlugin _ Failed Request _ Notifications
【发布时间】:2021-05-27 13:34:51
【问题描述】:

我有一个工作正常的 pwa。我用工作箱做的。 但我想尝试一些东西。 我想在以下情况下推送通知:请求(在 IndexeDB 中持有 -> 感谢 BackgroundSyncPlugin )有错误(如 Error 500 )。请求发送,不是BackgroundSyncPlugin 的问题,而是我的HTTP 请求的问题。我想警告用户该请求无效

这里是我的服务人员的一部分:

const bgSyncPlugin = new BackgroundSyncPlugin('myQueueName', {
    maxRetentionTime: 0.1 * 60, // mins,
    onSync: async({ queue }) => {
        let entry;
        while ((entry = await queue.shiftRequest())) {
            try {
                await fetch(entry.request);
                console.error("Replay successful for request", entry.request);
            } catch (error) {
                console.error("Replay failed for request", entry.request, error);

                // Put the entry back in the queue and re-throw the error:
                await queue.unshiftRequest(entry);
                throw error;
            }
        }
        console.log("Replay complete!");
        showNotification();
    }
});


registerRoute(
    /http:\/\/localhost:8000/,
    new NetworkFirst({
        plugins: [bgSyncPlugin]
    }),
    'POST'
);

我只想知道我的请求的状态码 任何帮助:)

编辑:我想得到Body in header2

【问题讨论】:

    标签: http-headers progressive-web-apps service-worker backgroundworker workbox


    【解决方案1】:

    你应该可以改变这一行:

    await fetch(entry.request);
    

    const response = await fetch(entry.request);
    // Check response.status, and do something, e.g. throw an
    // Error when it's above 500:
    if (response.status > 500) {
      // Throwing an Error will trigger a retry.
      throw new Error('Status: ' + response.status);
    }
    
    // This assumes that your response from the server is JSON,
    // and has an error field which might be set if the request
    // failed for some reason, regardless of the HTTP status code.
    const responseJSON = await response.json();
    if (responseJSON.error) {
      throw new Error('Failed request: ' + responseJSON.error);
    }
    

    【讨论】:

    • 你认为,我可以看看我的请求是否例外?我希望,例如,如果我有一个表单并且项目的创建没有完成。引发异常,我想通知用户。不一定会产生错误 500。当我在线时会显示一条消息。但是当我离线时,消息无法显示(即使我们在线后)
    • 对不起,我不明白你在这里描述的内容。
    • 好的,我会尝试更好地解释自己。当发送请求但它不起作用时。例如,将文章添加到数据库的请求,请求发送良好,但由于 x 原因,文章未添加到数据库。所以我没有错误 500,但我的请求返回的是错误消息。但是当用户脱机然后再次联机时,不会显示此 e=type 错误的消息。如何通知用户该项目不知道已发送我想清楚
    • 嗯,这取决于您的服务器响应的内容,但基本思想是检查响应的正文并采取适当的措施。我已经更新了示例代码以反映这一点。
    • 谢谢,但我的请求中没有任何消息 json。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    相关资源
    最近更新 更多