我正在尝试将带有express框架应用程序的node.js转换为流星。实质上是执行https://github.com/onmodulus/demeteorizer的相反方法
绝对不是自动的,但是您可以将许多技巧结合在一起以 几乎 自动获得它。
我已经经历过了,这是我所有的窍门。
让我们从您的Express应用程序主.js文件开始。您需要在顶部添加以下内容:
/server/main.js
:
routes = {};
var app = {
get: function(route, foo) {
// routes.get[route] = foo;
routes[route] = foo;
},
all: function(route, foo) {
// routes.all[route] = foo;
routes[route] = foo;
}
};
这一切都是为了定义所需的app
功能,并将定义的路由记录在一个对象中,稍后我们将使用来定义这些路由iron- router
。因此,这确保将类似以下内容的内容记录在其中routes
:
/server/main.js
:
app.get('/show', function(req, res) {
res.render('mytemplate');
});
那真的是主要的 把戏 。从这里开始它的辛勤工作。
在良好的流星风格中,我们会将所有路由渲染调用都包装到光纤中,以使其像流星服务器上的其他所有对象一样同步。为此,我们定义了一个包装函数waiter
,可以反复使用它来包装路由函数。虽然我们添加它,我们将按摩连接请求和响应,我们将得到流星服务器上的铁干道上res
和req
对象表达想看到的。请注意:这还算是完整的。只是我想从这些对象中使用的签名。
/server/main.js
:
/** create an sync version for meteor */
waiter = function(foo, req, res) {
var waiter_aux = Meteor._wrapAsync(function(foo, req, res, callback) {
res.set = function(header, value) {
res.setHeader(header, value);
};
res.send = function(codeorhtml, html) {
if (html) {
// two arguments provided, treat as described
res.statusCode = codeorhtml;
} else {
// no code, just html
html = codeorhtml;
}
callback(null, html);
};
res.render = function(name, data, callback) {
callback = callback || function(err, html) {
res.send(html);
};
var html = Handlebars.templates[name](data);
callback(null, html);
};
res.json = function(object) {
res.send(JSON.stringify(object));
}
res.redirect = function(URL) {
res.writeHead(302, {
'Location': URL
});
res.end();
};
req.header = function(x) {
return this.header[x];
};
TemplatesObject = Handlebars.templates;
// these objects need to be extended further
foo(req, res);
});
return waiter_aux(foo, req, res);
};
最后,真正的交易:为每个指定的特快航线创建航线。为此,我们将使用铁路由器。以下代码将遍历每个定义的路径(由我们的重新定义app
函数捕获并存储在中routes
),并使用our将其包装在光纤中waiter
,这还将照顾在this.request
/
this.response
和Express应用程序假定的req
和res
对象之间进行转换。
/routes.js
:
if (Meteor.isServer) {
// create routes for all the app.get's and app.all's in bibbase.js
// (server)
console.log("setting routes:", routes);
_.each(routes, function(foo, route) {
Router.map(function () {
this.route(route, {
path: route,
where: 'server',
action: function() {
this.request.params = this.params;
var html = waiter(foo, this.request, this.response);
if (!this.response.statusCode) {
this.response.statusCode = 200;
}
if (!this.response.getHeader('Content-Type')) {
this.response
.setHeader('Content-Type', 'text/html');
}
this.response.end(html);
}
});
});
});
}
这些是我完成您要问的工作所要做的最重要的事情。我敢肯定我在这里错过了一些细节,但这应该可以给你一个想法。
后空格键的更新(我忘记了那个版本的Meteor):
为了使这项工作,您现在需要添加handlebars-server:
meteor add cmather:handlebars-server
问题内容: 在我的应用程序中,我使用3rd party库(确切地说是MongoDB的Spring数据)。 该库的方法返回,而我的其他代码则期望。 有什么实用方法可以让我快速将一个转换为另一个吗?我想避免foreach在代码中创建这么简单的循环。 问题答案: 在JDK 8+中,不使用任何其他库: 编辑:上面的是Iterator。如果您正在处理Iterable,
问题内容: 我在Java方面苦苦挣扎,但无法将Java .wav转换为.mp3转换器的有效示例。该转换器将在Java applet中使用,因此它应仅依赖以纯Java编写的库,而无需底层C代码调用。 谁能提供一个完整的示例? 谢谢 问题答案: 阅读您的wave文件@ http://java.sun.com/javase/technologies/desktop/media/jmf/ 并编码为mp3
问题内容: 有很多示例可以使用jQuery在javascript/dom中实现某些功能。但是,使用jQuery并非总是一种选择,它会使理解jQuery编写的javascript解决方案的示例变得困难。 有没有一种简单的方法可以将jQuery代码转换为常规javascript?我猜不必访问或理解jQuery源代码。 问题答案: 最简单的方法是仅学习如何使用普通的DOM api进行DOM遍历和操作(您
我在处理这种情况。我有一个运行多个服务的Jax-ws应用程序,我需要在REST应用程序中公开这些服务。我怎么把它转换过来?我可以在两个应用程序之间做一个“代理”吗?THX!
问题内容: 我正在尝试为使用OpenCV中的类的C ++库创建 Python / Cython 包装器。在官方的Python包装器中,所有函数都使用NumPy代替,这非常方便。但是在我自己的包装器中,如何进行这种转换?也就是说,我怎么 创建 的 ? 问题答案: 如kyamagu所建议,您可以使用OpenCV的官方python包装器代码,尤其是and 。 我一直在像您一样处理所有依赖项和生成的头文件
问题内容: 假设我有一个包含要转换为指标的字符串的数据框。我用来将其转换为现在可用于构建模型的数据集。 现在,我有一个新的观察值,我想遍历我的模型。显然,我无法使用它,因为它不包含所有类,并且不会创建相同的指标矩阵。有什么好方法吗? 问题答案: 您可以从单个新观察值创建虚拟对象,然后使用原始指标矩阵中的列重新索引此框架列: 返回: