我有一个生成图像的流星应用程序.生成它们之后,我想为它们服务.但每次我写入公共文件夹时,我的meteor服务器都会重新启动.我搜索了一个解决方案,并找到了几个解决方法:
在项目文件夹之外提供文件 - 目前我不知道如何实现这一点,我是否必须编写某种集成到流星中的中间件?
在文件夹中添加了波浪号〜public/这似乎使meteor完全忽略了该文件夹,当我尝试访问文件夹中的文件时,我被重定向到我的根页面.
在生产模式下运行meteor.对我来说似乎是一个肮脏的解决方法.现在,meteor run --production仍然重新启动我的服务器,所以我必须捆绑我的应用程序,每次重新安装光纤,设置我的环境变量,然后运行应用程序.每次我改变一些东西.
还有其他解决方案吗?
接受的答案对我不起作用,但从版本0.6.6.3开始,您可以执行以下操作:
var fs = Npm.require('fs');
WebApp.connectHandlers.use(function(req, res, next) {
var re = /^\/url_path\/(.*)$/.exec(req.url);
if (re !== null) { // Only handle URLs that start with /url_path/*
var filePath = process.env.PWD + '/.server_path/' + re[1];
var data = fs.readFileSync(filePath, data);
res.writeHead(200, {
'Content-Type': 'image'
});
res.write(data);
res.end();
} else { // Other urls will have default behaviors
next();
}
});
Run Code Online (Sandbox Code Playgroud)
process.env.PWD 会给你项目的根目录如果您打算将文件放入项目中
public或private流星文件夹.uploads)不尊重这两个将导致本地流星在每次上传时重新启动,除非您运行您的流星应用程序: meteor run --production
那并没那么简单.
写入public是不可能的,因为Meteor管理这个文件夹,因此在每次文件更改时重新启动.
写入忽略的文件夹(从Meteor目录开始.或结束~,甚至在Meteor目录之外)是一个选项.但是,您需要手动提供这些文件.一个小型中间件可以解决这个问题:
__meteor_bootstrap__.app.stack.splice (0, 0, {
route: '/mediaPathOfChoice',
handle: function(req, res, next) {
/* Read the proper file based on req.url */
res.writeHead(200, {
'Content-Type': /* Put the item MIME type here */
});
res.write(/* Put item contents here */);
res.end();
},
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5395 次 |
| 最近记录: |