使用 nodemailer 生成文件和发送邮件 - GCP+NodeJS



我被下面的场景困住了。这在本地计算机上工作得很好,但是与GCP+NodeJs不工作。

问题-我有一个使用https://www.npmjs.com/package/qr-image生成QR-Images的API,然后它使用https://www.npmjs.com/package/archiver创建zip。归档完成后,它使用nodemailer(https://www.npmjs.com/package/nodemailer)发送邮件。

现在,要存储生成的图像&我使用的是NPM的fs库。

GCP配置——它是动态的/灵活的应用引擎,节点应用被部署在其中。

mkdir函数给出了问题。我不想用桶来做简单的事情。有没有其他的方法,我可以使用现有的代码没有调整发送邮件使用nodemail(存档文件(qr码)后)?

尝试在本地计算机上运行API。对于使用mailtrap的邮件测试。它似乎运行得很好。但不是GCP。

显然需要一些GCP调整或一些节点/express JS魔法。

触发错误的代码部分-

const codesFolder = 'codes';
if (!fs.existsSync(codesFolder)) {
fs.mkdirSync(codesFolder);
}

GCP日志错误-

2022-11-13 18:48:58 default[20221113t223118]  Processing email
2022-11-13 18:48:58 default[20221113t223118]  /workspace/node_modules/mysql/lib/protocol/Parser.js:437
2022-11-13 18:48:58 default[20221113t223118]        throw err; // Rethrow non-MySQL errors
2022-11-13 18:48:58 default[20221113t223118]        ^
2022-11-13 18:48:58 default[20221113t223118]  Error: EROFS: read-only file system, mkdir 'codes'      at Object.mkdirSync (node:fs:1382:3)      at Query.<anonymous> (/workspace/index.js:243:16)      at Query.<anonymous> (/workspace/node_modules/mysql/lib/Connection.js:526:10)      at Query._callback (/workspace/node_modules/mysql/lib/Connection.js:488:16)      at Query.Sequence.end (/workspace/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24)      at Query._handleFinalResultPacket (/workspace/node_modules/mysql/lib/protocol/sequences/Query.js:149:8)      at Query.EofPacket (/workspace/node_modules/mysql/lib/protocol/sequences/Query.js:133:8)      at Protocol._parsePacket (/workspace/node_modules/mysql/lib/protocol/Protocol.js:291:23)      at Parser._parsePacket (/workspace/node_modules/mysql/lib/protocol/Parser.js:433:10)      at Parser.write (/workspace/node_modules/mysql/lib/protocol/Parser.js:43:10) {
2022-11-13 18:48:58 default[20221113t223118]    errno: -30,
2022-11-13 18:48:58 default[20221113t223118]    syscall: 'mkdir',
2022-11-13 18:48:58 default[20221113t223118]    code: 'EROFS',
2022-11-13 18:48:58 default[20221113t223118]    path: 'codes'
2022-11-13 18:48:58 default[20221113t223118]  }

应用程序。YAML文件

runtime: nodejs16
env_variables:
# The following environment variables are set for all instances
# of the app.
NODE_ENV : "production"

有一些混淆。你的帖子说你在使用flex环境,但你的评论说标准环境。

如果您使用的是标准,那么您的代码将无法工作,因为标准不允许您写入本地磁盘(请参阅Google文档)

由于@NoCommandLine是正确的,早先我的app.YAML文件不包含env属性。

我在YAML中使用flex进行了一点调整。更新后的YAML如下所示-

runtime: nodejs
env: flex
env_variables:
# The following environment variables are set for all instances
# of the app.
NODE_ENV : "production"
beta_settings:
# The connection name of your instance, available by using
# 'gcloud beta sql instances describe [INSTANCE_NAME]' or from
# the Instance details page in the Google Cloud Platform Console.
cloud_sql_instances: <<<connection_name>>>

最新更新