【问题标题】:Meteor reading a file in public folder using readFileSync not working when deployed使用 readFileSync 读取公用文件夹中的文件的流星在部署时不起作用
【发布时间】:2015-07-02 07:05:56
【问题描述】:

我正在尝试读取 /public 文件夹中的 .json 文件。我使用的相对路径是'../../../../../public/data.json',当我使用meteor run运行时它可以工作。

但是,当我通过运行 meteor deploy MyApp.meteor.com 部署到流星子域时,它崩溃并且日志显示

错误:ENOENT,没有这样的文件或目录'../../../../../public/data.json'

我尝试使用“data.json”、“public/data.json”等,但无法正常工作。我在这里错过了什么?

【问题讨论】:

    标签: meteor


    【解决方案1】:

    如果您将文件 data.json 放在 public 文件夹的根目录中,您可以使用路径“/data.json”

    【讨论】:

    • 我已经尝试过,但出现如下错误:(STDERR) Error: ENOENT, no such file or directory '/data.json'
    • 那是你向服务器发出一个 http GET 请求,但不是你从服务器代码打开一个文件。
    【解决方案2】:

    将数据放在应用程序根目录下的“私有”目录中,而不是“公共”目录中(假设您只打算在服务器上读取它,这似乎是您正在做的)。当您想要该文件时(无论您是否已部署),它位于路径“assets/app/”中。

    例如,如果您的应用具有目录结构:

    myApp.css
    myApp.js
    myApp.html    
    server/
        serverCode.js
    private/
        data.json
    

    您可以使用“peerlibrary:fs”之类的东西,它公开了可感知光纤的 fs 同步功能,并在“serverCode.js”中执行以下操作

    var data = JSON.parse(fs.readFileSync("assets/app/data.json"));
    

    【讨论】:

    • 澄清一下,如果您在本地运行,您的应用程序会在一个名为(从您的应用程序根目录)调用的目录中运行:“.meteor/local/build/programs/server”,这是您会找到“assets/app”目录,其中包含“private”目录内容的副本。
    • 如果你想将它保存在“public”目录中,那么在部署时使用“../web.browser/app/”作为路径前缀。您已经说明了在未部署时如何到达它。因为无论您是否被部署都不同,所以与此答案中的解决方案相比,这是一个不太理想的解决方案。
    猜你喜欢
    • 2012-07-20
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 2016-03-29
    • 2017-09-16
    • 1970-01-01
    相关资源
    最近更新 更多