无法查看流星 public 目录中的新文件

Can't view new files in meteors public directory

当流星应用程序被编译(meteor build app)时,public 目录 becomes \programs\web.browser\app 开发 public 目录 \public 中的所有文件都是现在可以通过 http://domain.tld/file-in-public-directory.jpg

访问

当我将新文件放入已编译的 public 目录并尝试在浏览器中查看它时,出现错误,提示 Meteor 没有该 url 的路由.当我在开发 public 目录中执行此操作时,它可以完美运行,但在编译 (meteor build app).

中却不行

我需要这个,因为我想在该目录中上传新文件。

有什么帮助吗?

很高兴看到人们在那里尝试流星。这是很棒的东西 - 但与此同时,它看起来确实很复杂。真正帮助我的是使用这个应用程序:metoer-kitchen。我现在在处理我的项目时使用它。

所以,您必须稍微调整一下,但是有一种方法可以访问几乎任何您想要的文件夹,特别是对于静态文件,通过使用低级别 connectHandlers object.

这是一个示例,您有一个名为 .images 的文件夹(对 Meteor auto-refresh 隐藏),只要向 http://[yoursiteURL]/images/...[=18= 发出请求,它就会提供图像]

var fs = Npm.require('fs');
WebApp.connectHandlers.use(function(req, res, next) {
  var re = /^\/images\/(.*)$/.exec(req.url);
  if (re !== null) {   
    var filePath = process.env.PWD 
    + '/.images/' 
    + re[1];
    var data = fs.readFileSync(filePath, data);
    res.writeHead(200, {
      'Content-Type': 'image'
    });
    res.write(data);
    res.end();
  } else {  
    next();
  }
});

您正在使用正则表达式来查明传入请求是否试图访问 /images/。如果是,我们将发送带有适当 headers 的图像,使用 res.write()

注意两点:

1- 您不必使用任何特殊的东西(没有包等)来使用 Npm.require('fs'),因为它是内置的并且可用。

2- 使用 fs.readFileSync 有点麻烦,而且会阻塞。您需要对其进行调整以获得高性能的生产应用程序。

希望对您有所帮助!有关 connectHandlers 的更多信息,请参见 here