2013-05-26 27 views
11

Làm cách nào tôi có thể đọc thư mục công khai trong ứng dụng sao băng bên trong đường dẫn/máy chủ của tôi.Đọc các tệp từ thư mục bên trong ứng dụng sao băng

Tôi đã thử sử dụng gói 'fs' gốc nhưng tôi vẫn gặp phải lỗi tệp/thư mục không tìm thấy.

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

Có ai đã sử dụng gói hệ thống tệp để đọc tệp tĩnh bên trong ứng dụng sao băng không?

+2

Bạn đang sử dụng đường dẫn tuyệt đối ''/''. Hãy thử sử dụng một liên quan ''./Public/soundfiles/''hoặc'' public/soundfiles/'' –

+1

Cố gắng tất cả các đường dẫn tương đối - vì một số lý do fs bắt đầu đọc từ thư mục gói của tôi. Ví dụ, nếu tôi chuyển '.' và i output' files', tôi nhận tất cả các tệp trong thư mục gói của tôi? – Warz

Trả lời

2

Truy cập tệp mà không có phần "/ công khai". Trong một ứng dụng Meteor đang chạy, thư mục public trở thành thư mục gốc của bạn và mọi thứ nằm ở số /public/whatever có thể được truy cập tại /whatever.

Ngoài ra, nếu bạn đang chơi xung quanh với các tập tin, bạn có thể tìm thấy những hữu ích:

2

này không còn đúng. Đối với Meteor 0.8, thư mục "../client/app" là công khai. Do đó, hãy sử dụng fs.readdirSync ('../ client/app') để nhận tệp và thư mục ở chế độ công khai.

Nguồn: kinh nghiệm cá nhân và https://stackoverflow.com/a/18405793

+2

Sử dụng Meteor 1.0.1. Tôi đã phải sử dụng điều này: fs.createReadStream ("../../../../../ public/data"); Có vẻ điên tôi biết nhưng đó là những gì làm việc cho tôi – davedonohue

2

Đối với thiên thạch 1.0.2 nào là /web.browser/app/ Kiểm tra bằng cách nhập .meteor dir Tổng số đường dẫn trong /home/user/your_app_name/.meteor/ linux local/build/programs/web.browser/app/ Và để đến root là `process.env.PWD hoặc process.cwd(). Tôi không chắc chắn nếu công việc của nó được triển khai.

_meteor_bootstrap_.serverDir +'/assets/app' 

Đây là đường dẫn đến thư mục riêng tư.

+0

1.0 nói 'ReferenceError: _meteor_bootstrap_ không được định nghĩa.' –

4

Tôi đã học được cách tốt nhất là tải tệp lên trong thư mục riêng của bạn nếu bạn không hiển thị chúng ở bên ngoài. Trong trường hợp của tôi, tôi cần lưu trữ các tệp tải lên XML và xử lý chúng. Lúc đầu, tôi đã viết XML vào thư mục công cộng nhưng điều đó sẽ kích hoạt tải lại. Sau đó, tôi đổi tên thư mục tải lên thành /public/.#uploads sẽ dừng tải lại Meteor, nhưng sau đó lại ... nó hoàn toàn bỏ qua thư mục đó trong khi xây dựng và thư mục được tải lên sẽ không tồn tại trong bản dựng (ném lỗi ENOENT) trong khi đọc).

Vì vậy, tôi đã tìm ra cách tốt nhất là đưa các tập tin trong/private/tập tin và sau đó đọc đi như sau:

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

Tất cả mọi thứ trong thư mục riêng sẽ được chuyển đến thư mục tài sản nơi trong thời gian chạy có một thư mục APP có sẵn (bạn không thấy rằng trong cấu trúc thư mục xây dựng của bạn).

Nó giúp chỉ đơn giản đổ result = fs.readdirSync('.') để xem bạn đang ở trong thư mục nào và xem qua cấu trúc.

*** CẬP NHẬT ***** Đặt cục bộ tệp trong thư mục private vẫn kích hoạt sao lưu/cập nhật thiên thạch (có thể không có trong sản xuất ..) Vì vậy tôi tìm thấy một giải pháp sử dụng UploadServer chỉ để xác định thư mục upload: https://github.com/tomitrescak/meteor-uploads

1

này làm việc cho tôi trong Meteor 1.0:

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

hoạt động trên địa phương nhưng không thành công trong quá trình xây dựng sản xuất, bạn đã sử dụng công cụ này trong bản dựng sản xuất chưa? – chulian

+0

Do thiếu các nhà phát triển và biên dịch chậm trên Windows, tất cả các dự án Meteor đã bị hủy bỏ ở đây vào năm ngoái, nên tôi đã quên mất. –

+0

@chulian Giải pháp này hoạt động thường để biên soạn. Có lẽ điều này đã được sử dụng trong một Gói. Nó không hoạt động trong sản xuất vì các đường dẫn được thay đổi, cùng một câu chuyện như được mô tả trong các câu trả lời khác. – ghybs

0

Đối với Meteor 1.4, tài sản sử dụng máy chủ. Xem tài liệu chính thức về Tài sản http://docs.meteor.com/api/assets.html

+0

Vấn đề là tài sản dành cho các tệp văn bản thuần túy, nhưng tôi muốn đọc danh sách các tệp jsx trong một thư mục để tạo các đường dẫn bộ định tuyến phản ứng – chulian

Các vấn đề liên quan