所以我用iron:router解决了这个问题。我做了一个文件夹,assets
,它在流星文件夹之外。然后我有这样的代码来提供文件
var fs = Npm.require('fs');
var path = Npm.require('path');
Router.map(function () {
this.route('assets', {
where: 'server',
path: '/assets/:filename(.*)',
action: function() {
var basePath = process.env.ASSET_PATH;
var filename = path.normalize(path.join(basePath, this.params.filename));
var res = this.response;
if (filename.substr(0, basePath.length) != basePath ||
!fs.existsSync(filename) ||
!fs.statSync(filename).isFile()) {
res.writeHead(404, {'Content-Type': 'text/html'});
res.end('404: no such asset: ' + this.params.filename);
return;
}
var data = fs.readFileSync(filename);
var mimeType = mime.lookup(filename);
res.writeHead(200, { 'Content-Type': mimeType });
res.write(data);
res.end();
},
});
});
Mime 查找看起来像这样
var mime = {
lookup: (function() {
var mimeTypes = {
".html": "text/html",
".js": "application/javascript",
".json": "application/json",
".png": "image/png",
".gif": "image/gif",
".jpg": "image/jpg",
};
return function(name) {
var type = mimeTypes[path.extname(name)];
return type || "text/html";
};
}()),
};
该代码仅在服务器上执行,因此请将其放在服务器文件夹中或确保它处于if (Meteor.isServer)
检查状态。
正如您在上面看到的,我使用环境变量作为资产文件夹的路径。所以我可以像这样运行流星
ASSET_PATH=/some/path/to/assets meteor
我还在为and模块使用meteorhacks:npm模块。fs
path