【问题标题】:What is the Meteor server-side path to /public?Meteor 服务器端的 /public 路径是什么?
【发布时间】:2017-05-21 22:02:35
【问题描述】:

在 Meteor 客户端,我知道项目公共目录中的文件在“/”处引用。

它们在服务器端是如何引用的?

我正在尝试使用 fs.readdir 获取目录列表,但我不知道如何构造路径以到达相当于客户端“/images/gallery”的服务器端。

有什么建议吗?

【问题讨论】:

    标签: directory meteor server-side


    【解决方案1】:

    接受的“./public/”答案在 Meteor 1.1 中对我不起作用。

    但是,Meteor 通过 meteor_bootstrap.serverDir 变量提供服务器路径,因此要获取公用文件夹路径,我使用以下行:

    path.join(__meteor_bootstrap__.serverDir, "../web.browser/app");
    

    这适用于我的本地 Windows 机器和meteor.com。

    请注意,这是您的公用文件夹的“运行”版本,所以 - 至少在开发中,我没有在生产中检查这部分 - 它实际上是您的开发“公用”文件夹和所有客户端的合并-side JS 文件。如果您的项目中有一个“config”文件夹,而您的公共目录中有一个“config”文件夹,则“运行”路径将包含两者的内容。

    【讨论】:

    • 确认一下,这适用于我的开发机器和使用meteor build创建的生产服务器。
    【解决方案2】:

    自 0.6.5 版本的流星以来,main.js 进行了升级,现在 chdirs 进入您捆绑包中的程序/服务器。所以公共目录的内容在这里:../client/app/

    github的详细信息

    【讨论】:

    • 我尝试了“../client/app”,但返回了(在流星 0.6.5.1 中):["client","myappname.css","myappname.js","template.myappname.js"]。这在 0.6.5.1 中是否再次更改?
    【解决方案3】:

    当我使用 fs-module 时,我只使用 './public' 作为我的公用文件夹,在我的本地安装上工作正常。

    然后我使用环境变量在生产服务器上将其设置为正确的值。

    编辑(示例):

    此方法将返回公共文件夹中的所有 .HTML 文件:

    getHtmlFilesInPublicFolder: function() {
    
        var files = fs.readdirSync('./public/');
    
        var cleanedUpFiles = _(files).reject( function(fileName) {
            return fileName.indexOf('.html') < 0;
        });
    
        return cleanedUpFiles;
    
    }
    

    【讨论】:

    • 所以你是说 fs.readdir(./public, function()) 会返回服务器端公共目录中的文件列表?
    • 谢谢!我会试试看。
    • 仍然不适合我。从客户端我做:pages = Meteor.call('DirList'); 在服务器端我有:DirList: function () { var files = fs.readdirSync('./public/'); return files; } 但是回到客户端,在调用之后,页面是未定义的。我一定错过了什么?
    • 是的,Meteor.call 在客户端是异步的(总是)。所以你会这样做: Meteor.call('DirList', function(error, result) { console.log(result); });
    • 就是这样!非常感谢你的帮助。我刚刚开始使用 Meteor,我喜欢它,但它做的一些事情与我在 PHP 服务器端世界中习惯的不同。我可以请您也看一下这个问题吗? stackoverflow.com/questions/17264396/…
    【解决方案4】:

    如果您在客户端上使用节点文件系统库,那么您将使用本地文件系统结构,并且您的文件将被本地路径引用到它们驻留在本地磁盘上的位置。

    例如.. 如果您的项目位于 /home/bob/meteor_projects/project1,那么您的文件位于 /home/bob/meteor_projects/project1/public

    【讨论】:

    • 我有 node.fs 在服务器代码中运行。所以我需要公共的服务器路径。
    • 是的,服务器路径是,它位于服务器上的任何位置。如果您无法访问服务器以确切了解应用程序的安装位置,您可以随时在路径的开头指定您希望从执行应用程序的当前目录开始。如下所述。/public 将为您提供当前目录中的公共目录。
    【解决方案5】:

    我使用下面的代码行获得了 Meteor 项目目录的绝对路径。

    var absPath = process.env.PWD;
    

    我已经将它与 Meteor 1.4.3.2 一起使用,并且效果很好。

    【讨论】:

    • 遗憾的是,process.env.PWD 是未定义的,至少在带有 Meteor 1.8 的 Win10 上是这样
    猜你喜欢
    • 2015-03-14
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    相关资源
    最近更新 更多