问题 从流星应用程序内的目录中读取文件


如何在我/服务器路径中的meteor应用程序中读取公共目录。

我尝试使用原生 'fs' 包但我一直得到一个文件/目录未找到错误。

var fs = Npm.require('fs');
var files = fs.readdirSync('/public/soundfiles/');

有没有人使用文件系统包来读取流星应用程序中的静态文件?


7525
2018-05-26 19:36


起源

您正在使用绝对路径 '/' 。尝试使用相对的 './public/soundfiles/' 要么 'public/soundfiles/' - Bogdan Rybak
尝试了所有相对路径 - 由于某种原因,fs开始从我的packages目录中读取。例如,如果我通过 . 我输出 files,我得到我的包目录中的所有文件? - Warz


答案:


访问没有“/ public”部分的文件。在一个正在运行的Meteor应用程序中 public 目录成为您的根,以及位于的所有内容 /public/whatever 可以访问 /whatever

此外,如果您正在玩文件,您可能会发现这些有用:


2
2018-05-27 17:28





我了解到,如果您没有在外面显示文件,最好将文件上传到您的私人文件夹中。 在我的情况下,我需要存储XML上传并处理它们。 起初我将XML写入公共文件夹,但这会触发重新加载。 然后我将上传文件夹重命名为/public/.#uploads,这将停止Meteor的重新加载,但是又一次......它在构建过程中完全忽略了该文件夹,并且构建中不存在上传的文件夹(在此过程中抛出ENOENT错误)读)。

所以我想出最好将文件放在/ private / files中,然后阅读如下:

result = fs.readdirSync('assets/app/files')

私有文件夹中的所有内容都将移动到Assets文件夹,在运行时期间有一个APP文件夹可用(您在构建文件夹结构中没有看到)。

它只是简单的转储 result = fs.readdirSync('.') 查看您所在的文件夹并查看结构。

*** UPDATE ***** 本地放入文件 private 文件夹仍然触发meteor重建/更新(可能不在生产中......)所以我发现另一个解决方案使用UploadServer来定义上传目录: https://github.com/tomitrescak/meteor-uploads


4
2017-09-14 02:57





这不再是真的。对于Meteor 0.8,文件夹“../client/app”是公开的。因此,使用fs.readdirSync('../ client / app')来公开获取文件和文件夹。

资料来源:个人经历和 https://stackoverflow.com/a/18405793 


2
2018-03-30 20:35



使用Meteor 1.0.1。我必须使用这个:fs.createReadStream(“../../../../../ public / data”);我知道这似乎很疯狂,但这对我有用 - davedonohue


对于meteor 1.0.2 public是/web.browser/app/ 通过输入.meteor dir进行检查 linux中的总路径/home/user/your_app_name/.meteor/local/build/programs/web.browser/app/ 要获得root是`process.env.PWD或process.cwd()。 我不确定它的工作是否已部署。

_meteor_bootstrap_.serverDir +'/assets/app'

这是私人文件夹的路径。


2
2017-12-30 23:45



1.0说 ReferenceError: _meteor_bootstrap_ is not defined. - Cees Timmerman


这在Meteor 1.0中对我有用:

var fs = Npm.require('fs')
var xsd = fs.readFileSync(process.cwd().split('.meteor')[0] + 'server/company.xsd', 'utf8')

2
2018-02-28 19:29



适用于本地但在生产版本上失败,您是否在生产版本中使用了它? - chulian
由于缺乏开发和Windows上的编译速度慢,去年所有Meteor项目都被取消了,所以我忘记了。 - Cees Timmerman
@chulian此解决方案通常用于编译。可能这是在包中使用的。它在生产中不起作用,因为路径改变了,与其他答案中描述的故事相同。 - ghybs


对于Meteor 1.4,请使用服务器资产。 请参阅有关资产的官方文档 http://docs.meteor.com/api/assets.html


1
2017-09-22 04:09



问题是资产是纯文本文件,但我想读取文件夹中的jsx文件列表来创建反应路由器路径 - chulian