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

时间:2016-01-27 23:26:51

标签: javascript meteor iron-router

流星的新手,我对整个客户端/服务器的事情都很糟糕。超级有趣。

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

js file:

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未定义”错误。我不知道这是不是应该如何构建,请记住,newb在这里。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我可能会使用反应式数组(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}}