2013-05-26 4 views
11

Ortak dizinimi/sunucumdaki bir meteor uygulamasında nasıl okuyabilirim.Bir meteor uygulamasının içindeki bir dizinden dosya okuma

Yerel 'fs' paketini kullanmayı denedim ancak bir dosya/dizin bulunamadı hatası alıyorum.

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

Herhangi bir meteor uygulamasında statik dosyaları okumak için dosya sistemi paketini kullanan var mı?

+2

Resmi belgelerine bakın Mutlak bir yol olan ''/''. Göreceli bir ''./Public/soundfiles/''veya'' public/soundfiles/'' –

+1

kullanmayı deneyin Tüm göreceli yolları denediniz - bir sebepten fs paketler dizinimden okumaya başlar. Örneğin, '' 'ı ve' files' i çıkışı verirsem, tüm dosyaları paketleri dizinimden alırım? – Warz

cevap

2

"/ public" kısmı olmadan dosyalara erişme. Çalışan bir Meteor uygulamasında, public dizini kökünüz olur ve /public/whatever adresindeki her öğeye /whatever adresinden erişilebilir. Eğer dosyaları etrafında oynuyorsanız

Ek olarak, bu konuda yararlı olabilecek:

2

Bu artık doğrudur. Meteor 0.8 için "../client/app" klasörü herkese açıktır. Böylece, genel dosya ve klasörleri almak için fs.readdirSync ('../ client/app') kullanın.

Kaynak: kişisel deneyim ve https://stackoverflow.com/a/18405793 meteor için

+2

Meteor 1.0.1'i Kullanma. Bunu kullanmam gerekti: fs.createReadStream ("../../../../../ public/data"); Çılgın görünüyor biliyorum ama bu benim için çalıştığı nedir – davedonohue

2

1.0.2 kamu /web.browser/app/ linux /home/user/your_app_name/.meteor/ içinde dir Toplam yoluna .meteor girerek İşaretli olan local/build/programs/web.browser/app/ Köküne ulaşmak için process.env.PWD veya process.cwd(). İşinin dağıtılıp dağıtılmadığından emin değilim.

_meteor_bootstrap_.serverDir +'/assets/app' 

Bu, özel klasörün yoludur.

+0

1.0 diyor 'ReferenceError: _meteor_bootstrap_ tanımlı değil.' –

4

Dışarıda görüntülenmiyorsa, dosyaları özel klasörünüze yüklemek en iyisi olduğunu öğrendim. Benim durumumda, XML yüklemelerini saklamak ve işlemek zorundayım. İlk başta XML'i ortak klasöre yazdım ancak bu bir yeniden yüklemeyi tetikleyecekti. Ardından, yükleme klasörünü Meteor'ın yeniden yüklenmesini durduracak olan /public/.#uploads olarak yeniden adlandırdım, ancak daha sonra ... yapı sırasında bu klasör tamamen yok sayıldı ve yüklenen klasör yapı içinde mevcut olmayacaktı (ENOENT hatası atıldı) okuma sırasında). Özel klasörde

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

Her şey sırasında nerede Varlıklar klasörüne taşınacak:

Bu yüzden/özel/dosyalarında dosyaları koymak en iyisidir ve aşağıdaki gibi daha sonra okuma gider anladım çalışma zamanı mevcut bir APP klasörü var (bunu yapı klasörü yapısında görmüyorsunuz).

Yapı içinde hangi klasörü görüp baktığınızı görmek için result = fs.readdirSync('.') numaralı basit çöp kutusuna yardımcı olur.

*** UPDATE ***** Yerel olarak dosyaları private klasörüne yerleştirmek hala meteor yeniden oluşturmayı/güncellemeyi (belki de üretimde değil) tetikledi. https://github.com/tomitrescak/meteor-uploads

1

Bu Meteor 1.0 benim için çalışıyor:

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

yerel üzerinde çalışıyor ancak bir üretim yapısında başarısız, bunu bir üretim derlemesinde kullandınız mı? – chulian

+0

Windows'da devlerin olmaması ve yavaş bir derleme nedeniyle, Meteor projelerinin tümü geçen yıl burada iptal edildi, bu yüzden unuttum. –

+0

@chulian Bu çözüm genellikle derleme için çalışır. Muhtemelen bu paket içinde kullanıldı. Yollar değiştiğinden, diğer cevaplarda anlatıldığı gibi aynı hikayeden beri üretimde çalışmaz. – ghybs

0

Meteor 1.4 için kullanmak sunucu Varlıklar) böylece sadece yükleme dizini tanımlamak için UploadServer kullanarak başka bir çözüm buldular. Assets http://docs.meteor.com/api/assets.html

+0

Sorun, varlıkların düz metin dosyaları için olduğu, ancak yanıt yönlendirici yolları oluşturmak için bir klasördeki jsx dosyalarının listesini okumak istiyorum – chulian