【问题标题】:AWS EC2 access file with relative path in Node app节点应用程序中具有相对路径的 AWS EC2 访问文件
【发布时间】:2020-12-12 02:31:26
【问题描述】:

我在 EC2 实例上部署并运行了一个节点 (v10) 应用程序。所以我正在尝试写入应用程序内资产目录中的文件。我在 app.js 中声明了路径

app.set('assets',path.join(__dirname, 'assets'));

在我的脚本中,我就是这样做的

let fileName = 'data.json'
fs.writeFile('assets/'+fileName, response.Body.toString('ascii'),(err) => { if(err) console.log(err); });

data.json 文件位于 assets 目录中。当我在本地环境中测试它时,它工作正常。但是当我在已部署的应用程序中对其进行测试时,出现以下错误:

[Error: ENOENT: no such file or directory, open 'assets/data.json'] {
data:    bin/www:89 -   errno: -2,
data:    bin/www:89 -   code: 'ENOENT',
data:    bin/www:89 -   syscall: 'open',
data:    bin/www:89 -   path: 'assets/data.json'
data:    bin/www:89 - }

您能否帮我在部署在 EC2 实例上时如何访问该文件。

【问题讨论】:

    标签: node.js amazon-web-services amazon-ec2 amazon-ecs


    【解决方案1】:

    你应该试试

    fs.writeFile(__dirname + 'assets/'+fileName, response.Body.toString('ascii'),(err) => { if(err) console.log(err); });
    

    __dirname 将为您提供放置节点应用程序的当前目录。

    或者

    fs.writeFile(app.get('assets')+'/'+fileName, 
    

    当您设置 assets 值时。

    目前,您正在尝试以绝对路径访问 /assets,这在 Ubuntu 或任何 linux 中都不存在。

    【讨论】:

    • 嘿。所以我在不同的脚本中进行了 fs 操作。我将应用程序模块导入为const app = require('../app')。当我使用 app.get('assets') 时,我收到 app.get 不是函数的错误
    【解决方案2】:

    您没有使用之前设置的变量。你应该这样使用它:

    fs.writeFile(app.settings.assets + '/' + fileName, response.Body.toString('ascii'),(err) => { if(err) console.log(err); });
    

    另外,听起来assets 文件夹实际上并不存在于 EC2 实例上。您可能需要先致电fs.mkdir(app.settings.assets)

    【讨论】:

    • 嘿。所以我在不同的脚本中进行了 fs 操作。我将 app.js 中的 app 模块导出为 module.exports = app。我在我的脚本中将应用程序导入为const app = require('../app');。所以当我尝试 app.settings.assets 时,我得到一个错误 TypeError: Cannot read property 'assets' of undefined
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 2011-01-24
    相关资源
    最近更新 更多