2013-05-26 53 views
11

如何读取我/服务器路径中的流星应用程序中的公共目录。从流星应用程序目录中读取文件

我尝试使用本机'fs'包,但我不断收到文件/目录找不到错误。

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

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

+2

您正在使用绝对路径“/”。尝试使用相对的''./ public/soundfiles /''或''public/soundfiles /' –

+1

尝试了所有相对路径 - 出于某种原因fs开始从我的软件包目录读取数据。例如,如果我通过'.'输出'文件',我得到我的软件包目录中的所有文件? – Warz

回答

2

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

此外,如果您正在使用的文件打转转,你会发现这些有用:

2

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

来源:个人经验和https://stackoverflow.com/a/18405793

+2

使用流星1.0.1。我不得不使用这个:fs.createReadStream(“../../../../../ public/data”);似乎疯了我知道,但这是对我有用 – davedonohue

2

流星1.0.2公众/web.browser/app/ 通过在Linux /home/user/your_app_name/.meteor/进入.meteor目录 总路径经过local/build/programs/web.browser/app/ 到达根目录是`process.env.PWD或process.cwd()。我不确定它是否部署了它的工作。

_meteor_bootstrap_.serverDir +'/assets/app' 

这是私人文件夹的路径。

+0

1.0说'ReferenceError:_meteor_bootstrap_没有定义。' –

4

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

所以我想通了,最好是放在/私营/文件中的文件,然后读去如下:在私人文件夹

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

一切都将在被移动到资产所在的文件夹运行时有一个可用的APP文件夹(在构建文件夹结构中没有看到)。

它有助于简单转储result = fs.readdirSync('.')以查看您在哪个文件夹中并查看结构。

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

1

这流星1.0为我工作:

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

工作在本地但生产构建失败,你有没有在生产构建? – chulian

+0

由于缺乏开发工具和Windows编译速度慢,去年所有Meteor项目都在这里取消,所以我忘了。 –

+0

@chulian此解决方案通常用于编译。可能这是在一个包中使用。由于路径被改变,它在生产中不起作用,与其他答案中描述的一样。 – ghybs

0

流星1.4,使用服务器资源。 查看资产官方文档 http://docs.meteor.com/api/assets.html

+0

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

相关问题