当前位置: 首页 > 面试题库 >

是否有将Express应用程序转换为流星的简单方法?[关闭]

巩光誉
2023-03-14
问题内容

我正在尝试将带有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,可以反复使用它来包装路由函数。虽然我们添加它,我们将按摩连接请求和响应,我们将得到流星服务器上的铁干道上resreq对象表达想看到的。请注意:这还算是完整的。只是我想从这些对象中使​​用的签名。

/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应用程序假定的reqres对象之间进行转换。

/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 。 我一直在像您一样处理所有依赖项和生成的头文件

  • 问题内容: 假设我有一个包含要转换为指标的字符串的数据框。我用来将其转换为现在可用于构建模型的数据集。 现在,我有一个新的观察值,我想遍历我的模型。显然,我无法使用它,因为它不包含所有类,并且不会创建相同的指标矩阵。有什么好方法吗? 问题答案: 您可以从单个新观察值创建虚拟对象,然后使用原始指标矩阵中的列重新索引此框架列: 返回: