最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Google Cloud Function 在使用 Node.js

网站源码admin38浏览0评论

Google Cloud Function 在使用 Node.js

Google Cloud Function 在使用 Node.js

我有一个使用 Node.js 构建的 Google Cloud Function 和由 Cloud Pub/Sub 主题触发的 Express 框架。该函数从主题中读取消息并在将响应发送回 Pub/Sub 之前执行一些处理。但是,有时函数会因错误消息“响应错误”而终止。这种情况间歇性发生,我无法确定问题的根本原因。

值得注意的是我的函数没有返回很多数据。它只是将一个小的 JSON 对象返回给 Pub/Sub 主题。此外,该功能已经配置了足够的资源,所以我不认为资源限制是问题。

这是我的代码:

import * as express from 'express';
export function initializeExpress(app = express()): void {
  app.put(`${endpoint}/:trackId/audio`, (req, res) => {
    service
      .process(req, res, new TracksUploadRequestHandler())
      .then()
      .catch(error => console.error(error));
  });
}

.
.
.

export class Service {
  public async process(request: Request, response: Response, requestHandler: RequestHandler): Promise<void> {
    const processResponse: ProcessResponse = await requestHandler.processRequest(request);

    response.header('Content-Type', 'application/json');
    response.header('X-Content-Type-Options', 'nosniff');
    response.status(200).send(processResponse);
  }
}

.
.
.

export class RequestHandler {
  processRequest(request: Request): ProcessResponse | ErrorResponse {
    return {
      title: 'Created',
      status: 201,
    } as TracksUploadResponse;
  }
}

这是我已经尝试过的:

  • 检查日志是否有任何错误或异常,但没有发现任何相关内容。
  • 增加了云函数的超时值,但问题仍然存在。
  • 检查 Pub/Sub 主题是否有任何问题,但一切似乎都运行良好。

日志中出现的唯一错误消息是“函数执行耗时 2530 毫秒,完成状态:‘响应错误’”。 我想知道问题是否与 Express 框架的使用或返回数据的大小有关。在返回少量数据时,是否还有其他人遇到过 Express 和 Google Cloud Functions 的类似问题?任何建议或见解将不胜感激。提前致谢!

回答如下:

我遇到了类似的问题,由于在收到整个请求之前返回了响应,我的云功能崩溃了。为了解决这个问题,我决定使用我的编程语言中的内置函数来缓冲整个请求体。

通过缓冲整个请求体,我能够确保在处理之前接收到整个请求。这防止了响应过早返回的任何问题,并有助于确保我的云功能总体上更可靠。

这是我用来缓冲请求正文的代码片段:

    // Read the request body into a buffer
const buffer = [];
req.on('data', (chunk) => {
  buffer.push(chunk);
}).on('end', () => {
  const body = Buffer.concat(buffer).toString();
  // Process the request body here
});

在这段代码中,我使用 on('data') 方法将请求主体读入缓冲区,并使用 on('end') 方法将缓冲区连接成一个可以由我的代码处理的字符串。

通过使用这种方法,我能够解决由于过早返回响应而导致我的云函数崩溃的问题。我希望这可以帮助其他可能遇到类似问题的人!

发布评论

评论列表(0)

  1. 暂无评论