【问题标题】:fs.writeFile works on localhost but not production serverfs.writeFile 适用于 localhost 但不适用于生产服务器
【发布时间】:2022-01-26 22:53:37
【问题描述】:

我有一个基本的网络应用程序设置,其文件结构类似于:

WEB APP
 - data
   -year.txt

 - cron
   -write.js

一个父目录有两个文件夹,每个文件夹包含一个文件。 write.js 文件在后端生成一堆数据,JSON.string 化该数据并将字符串写入位于另一个文件夹中的 year.txt 文件。这是它在 write.js 文件中的样子:

try {
   fs.writeFile(__dirname + '/../data/year.txt', JSON.stringify(organizedData), () => {
      console.log('SUCCESS');
      res.status(200);
      res.send(null);
    });
} catch (e) {
      res.status(500);
      console.log(e);
      res.send(null);
}

所有这些在我的本地服务器上都可以正常工作,write.js 文件使用正确的数据更新 year.txt。我只是在努力弄清楚为什么这在我的生产服务器上不起作用,该服务器托管在 Google Cloud App Engine 上。真正让我困惑的部分是,当我检查此生产服务器上的日志时,我收到“SUCCESS”消息,这意味着 fs.writeFile 函数没有抛出任何错误。我检查year.txt文件的url路径,没有添加任何内容。好像没搞明白,是不是跟writeFile函数中的文件路径有关系?

【问题讨论】:

  • 如果这些解决方案都不起作用,(如果您可以更改代码并将其重新部署到生产环境)我会尝试使用console.log 正上方的@987654326 显示__dirname + '/../data/year.txt'JSON.stringify(organizedData) @。您可能会在这些变量中发现一些意想不到的东西。

标签: javascript node.js google-app-engine fs


【解决方案1】:

fs.writeFile() 将其错误作为第一个参数err 传递给回调(您没有注意它)。因此,您要做的第一件事就是记录fs.writeFile() 得到的实际错误。但是,我会“猜测”这是您尝试在托管配置中写入的目录的文件权限错误。

fs.writeFile() 不会通过抛出异常来传达错误。所以,你需要捕捉这样的错误:

   fs.writeFile(__dirname + '/../data/year.txt', JSON.stringify(organizedData), (err) => {
      if (err) {
          console.log(err);
          res.sendStatus(500);
      } else {
          console.log('SUCCESS');
          res.sendStatus(200);
   });

是不是跟writeFile函数中的文件路径有关系

是的,可能。但是记录实际错误将为您提供更多信息。您还可以阅读有关您的托管配置的一些文档,以了解您可以从服务器进程写入的确切位置。

这是来自 Google Cloud 应用引擎文档的reference,内容是关于将数据写入文件。它建议您写入临时目录或写入 Google Cloud 存储。

【讨论】:

  • 你是对的。它在我的生产服务器上给了我一个 EROFS 日志。感谢您的帮助!
  • @awoldt - 见this discussion。听起来对于临时文件存储,您写入临时文件目录,而对于持久存储,您写入谷歌云存储(通过他们的 API)。而且,这是来自 Google docs 的参考。
【解决方案2】:

这可能与您服务器环境中的文件系统读写策略有关,您需要验证您的节点应用程序是否具有在该特定目录中写入文件的足够权限

记录实际错误将为您和我提供更多信息。你也 需要阅读有关您的一些文档,以了解您可以从服务器进程写入的确切位置。

【讨论】:

    猜你喜欢
    • 2015-07-18
    • 1970-01-01
    • 2013-07-13
    • 2020-09-03
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    相关资源
    最近更新 更多