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') 方法将缓冲区连接成一个可以由我的代码处理的字符串。
通过使用这种方法,我能够解决由于过早返回响应而导致我的云函数崩溃的问题。我希望这可以帮助其他可能遇到类似问题的人!
更多推荐
Google Cloud Function 在使用 Node.js
发布评论