流星的新手,我对整个客户端/服务器的事情都很糟糕。超级有趣。
我想阅读文件夹中所有文件的列表,然后在模板上的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在这里。任何帮助将不胜感激。
答案 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}}