如何获取 Meteor 中模板的文件列表?

How to get a list of files to the template in Meteor?

meteor 的新手,我对整个 client/server 玩得很开心。超级好玩。

我想读取文件夹中所有文件的列表,然后将它们打印在模板上的 UI 上。它必须是可能的。这是代码。

js文件:

var availableFiles = [];
if (Meteor.isServer) {
    var fs = Npm.require('fs');
    availableFiles = fs.readdirSync(process.env.PWD + '/public/uploads');
    console.log(availableFiles);
}

Router.map(function() {

    this.route('home', {
        path: '/',
        template: 'home',
        data: {files: availableFiles}
    });
});

html 文件:

<template name="home">
{{#each data.files}}
    {{this}}
{{/each}}
</template>

我试图将 fs 调用放在路由定义数据的函数中,但出现 "Npm is not defined" 错误。我不知道它是否应该这样组织,请记住,这里是新手。任何帮助将不胜感激。

我可能会使用反应数组 (http://reactivearray.meteor.com/) 和 Meteor 方法来执行此操作。类似于:

if (Meteor.isServer) {
    var fs = Npm.require('fs');
    Meteor.methods({
        getFiles() {
            return fs.readdirSync(process.env.PWD + '/public/uploads');
        }
    });
}

if( Meteor.isClient ) {
    Template.home.onCreated( function() {
        Template.instance().files = new ReactiveArray();
        Meteor.call('getFiles', function(error, result) {
            if( error ) {
                console.log( error );
            } else {
                Template.instance().files = files.concat( result );
            }
        });
    });
    Template.home.helpers({
        files() {
            return Template.instance().files.array();
        }
    });
}

Router.map(function() {

    this.route('home', {
        path: '/',
        template: 'home',
        data: {files: availableFiles}
    });
});

语法可能不完美,但应该能说明问题。您还需要将模板更改为 {{#each files}}