Node.js 谷歌云运行返回错误503-服务不可用

Node.js 谷歌云运行返回错误503-服务不可用,node.js,google-drive-api,google-cloud-run,Node.js,Google Drive Api,Google Cloud Run,由于某种原因,我无法发现,CloudRun总是返回503-Unavailable。不管我做什么。这在本地起作用,所以我不知道可能是什么问题。应用程序的所有其他端点都正常工作。一切都正常运行,但由于某种原因,此请求仅在本地主机上有效,但部署到GCR时,它不起作用 我想做的是上传一个文件到谷歌硬盘。以下是请求的逻辑: router.post("/upload", async(req, res)=>{ const payload = req.body; const r

由于某种原因,我无法发现,CloudRun总是返回503-Unavailable。不管我做什么。这在本地起作用,所以我不知道可能是什么问题。应用程序的所有其他端点都正常工作。一切都正常运行,但由于某种原因,此请求仅在本地主机上有效,但部署到GCR时,它不起作用

我想做的是上传一个文件到谷歌硬盘。以下是请求的逻辑:

router.post("/upload", async(req, res)=>{
  const payload = req.body;
  const resource = {
    name: payload.fileName || "Picture",
    driveId: process.env.DRIVE_ID
  };
  const uploadedFile = await uploadToTeamDrive(payload.imgData, resource).catch(error=>{
    console.error(`Error uploading file to team drive: ${error.toString()}`);
    gapiError(res, error);
  });
  if(!uploadedFile){ return; }
  res.status(201).send({success: true});
});

const uploadToTeamDrive = async(base64Img, resource)=>{
  const base64String = base64Img.split(",")[1];
  const imgData = Readable.from(Buffer.from(base64String, "base64"));
  const mimeType = base64Img.split(",")[0].split(";")[0].split(":")[1];
  const scopes = ["https://www.googleapis.com/auth/drive"];
  const client = await getClient(scopes);
  const service = google.drive({version: "v3", auth: client});
  const request = await service.files.create({
    media: {
      body: imgData,
      mimeType: mimeType
    },
    requestBody: resource,
    fields: "id,webViewLink,name,thumbnailLink,iconLink",
    supportsAllDrives: true
  });
  const file = request.data;
  return file;
}
这是来自云运行的日志所说的:

Default
2021-02-05 13:01:20.945 CSTevents.js:187
Default
2021-02-05 13:01:20.945 CST throw er; // Unhandled 'error' event
Default
2021-02-05 13:01:20.945 CST ^
Default
2021-02-05 13:01:20.945 CST
Default
2021-02-05 13:01:20.945 CSTTypeError [ERR_INVALID_ARG_TYPE]: The "chunk" argument must be one of type string or Buffer. Received type number
Default
2021-02-05 13:01:20.945 CST at validChunk (_stream_writable.js:268:10)
Default
2021-02-05 13:01:20.945 CST at ProgressStream.Writable.write (_stream_writable.js:303:21)
Default
2021-02-05 13:01:20.945 CST at Readable.ondata (_stream_readable.js:727:22)
Default
2021-02-05 13:01:20.945 CST at Readable.emit (events.js:210:5)
Default
2021-02-05 13:01:20.945 CST at addChunk (_stream_readable.js:309:12)
Default
2021-02-05 13:01:20.945 CST at readableAddChunk (_stream_readable.js:290:11)
Default
2021-02-05 13:01:20.945 CST at Readable.push (_stream_readable.js:224:10)
Default
2021-02-05 13:01:20.945 CST at next (internal/streams/from.js:34:27)
Default
2021-02-05 13:01:20.945 CST at processTicksAndRejections (internal/process/task_queues.js:93:5)
Default
2021-02-05 13:01:20.945 CSTEmitted 'error' event on Readable instance at:
Default
2021-02-05 13:01:20.945 CST at emitErrorNT (internal/streams/destroy.js:92:8)
Default
2021-02-05 13:01:20.945 CST at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
Default
2021-02-05 13:01:20.945 CST at processTicksAndRejections (internal/process/task_queues.js:80:21) {
2021-02-05 13:01:20.945 CST code: 'ERR_INVALID_ARG_TYPE'
Default
2021-02-05 13:01:20.945 CST}
2021-02-05 13:01:20.959 CSTPOST503661 B53 msChrome 88 https://xxx-yyy-test-75i2ghnk3q-uc.a.run.app/images/upload
The request failed because either the HTTP response was malformed or connection to the instance had an error.
Default
2021-02-05 13:01:20.961 CSTnpm ERR! code ELIFECYCLE
Default
2021-02-05 13:01:20.961 CSTnpm ERR! errno 1
Default
2021-02-05 13:01:20.962 CSTnpm ERR! xxx-yyy@0.0.0 startapp: `node server/server.js`
Default
2021-02-05 13:01:20.962 CSTnpm ERR! Exit status 1
Default
2021-02-05 13:01:20.962 CSTnpm ERR!
Default
2021-02-05 13:01:20.963 CSTnpm ERR! Failed at the xxx-yyy@0.0.0 startapp script.
Default
2021-02-05 13:01:20.963 CSTnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.
Default
2021-02-05 13:01:22.078 CST
Default
2021-02-05 13:01:22.078 CST> xxx-yyy@0.0.0 startapp /usr/src/app
Default
2021-02-05 13:01:22.078 CST> node server/server.js
Default
2021-02-05 13:01:22.078 CST
Default
2021-02-05 13:01:23.240 CSTListening on port: 8080

我已经采纳了报告中的所有建议,但似乎没有任何东西给我暗示。日志上没有更多内容,我已经查看了,似乎没有发现任何问题。

多亏了的建议,我才能够在本地对容器进行故障排除。我意识到出于某种原因,导致问题的原因是:

const imgData = Readable.from(Buffer.from(base64String, "base64"));
这行代码在windows上工作,windows是我的开发环境,但在linux(容器环境)上不工作。感谢您,我将该行代码更改为:

const theBuff = Buffer.from(base64String, "base64");
const imgData = new PassThrough();
imgData.end(theBuff);

上面的内容在linux上似乎很好,现在错误消失了。总之,这不是谷歌云运行问题,而是环境代码问题。我仍然要调查错误的原因。如果有人知道,请提供一些启示。

您是在本地尝试了容器还是只尝试了代码?@guillaumeblaquier只尝试了代码。我想我需要在本地测试这个容器。是的,两个都试一下。检查nodeJS运行时版本是否相同,以及安装的依赖项是否相同。