我想用express框架應用程序將node.js轉換爲流星。 本質上做的https://github.com/onmodulus/demeteorizer有沒有一種簡單的方法將一個快速應用轉換爲流星?
回答
絕對不會自動反轉方式,但也有竅門的一堆你可以鏈在一起幾乎自動獲得它。
我已經經歷了這一切,這裏是我的所有技巧。
讓我們從您的快速應用主.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);
};
最後,實打實的:創建每個指定的快遞路線的路線。爲此,我們將使用iron-router。下面的代碼將通過每個定義的路徑(由我們重新定義app
功能捕獲並存儲在routes
),並使用我們waiter
敷在纖維,這也將採取this.request
/this.response
和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);
}
});
});
});
}
這是最重要的事情,我對我所做的完成你問什麼。我確定我在這裏錯過了一些細節,但這應該給你一個想法。
更新後Spacebars(我忘了流星的版本,這是):
爲了使這項工作,你現在需要添加handlebars-server:
meteor add cmather:handlebars-server
這是一個非常令人印象深刻的答案! – imslavko
- 1. 有沒有一種快速的方法將實體轉換爲.csv文件?
- 2. 有沒有一種簡單的方法在JavaScript中將文本轉換爲HTML?
- 3. 有沒有一種有效的方法將Bundle轉換爲ContentValues?
- 4. 有一種簡單的方法來System.Data.DataTable轉換爲LINQ實體?
- 5. 有一種簡單的方法來轉換爲PDO
- 6. 有沒有一種方法可以將網頁轉換爲pdf?
- 7. 有沒有一種簡單的方法來將我所有的字符串轉換爲對strings.xml的引用
- 8. 有沒有一種簡單的方法將「font」風格的屬性轉換爲它的每種風格?
- 9. 有沒有一種快速解鎖Emacs中的鍵的方法?
- 10. 有沒有簡單的方法將值轉換爲字符串?
- 11. 有沒有簡單的方法將標準轉換爲HQL?
- 12. 有沒有簡單的方法將C#類轉換爲PHP?
- 13. 有沒有一種將熊貓數據框轉換爲漂亮的HTML表格的快速方法?
- 14. 有沒有一種簡單快捷的方式來生成JavaScript?
- 15. 有沒有一種快速找到約束所在的方法?
- 16. 有沒有一種快速的方法將Java xml對象轉換爲Scala xml對象?
- 17. 有沒有一種簡單的方法來縮小Angular 2快速啓動應用程序
- 18. 有沒有一種簡單的方法來document.createElement多個元素?
- 19. 有沒有一種簡單的方法來將字符串轉換爲使用vbscript的數學表達式?
- 20. 有沒有一種簡單的方法將excel forumla轉換成android應用程序?
- 21. 有沒有一種快速的方法轉移到Github的叉子?
- 22. 有沒有一種簡單的方法使用django禿鷲?
- 23. 有沒有一種快速的方法將一個相同對象的所有變量轉換爲C#中的另一個變量?
- 24. 有沒有一種方便的方法將數據從單個列中轉換爲使用ADO .NET的集合?
- 25. 有沒有一種有效的方法將numpy.ndarray轉換爲列表?
- 26. 有沒有一種將LINQ-to-SQL數據轉換爲XML的有效方法?
- 27. 有沒有一種簡單的方法來用Dotty編譯一個sbt項目?
- 28. 有沒有一種快速的方法來重建拼音文件名單?
- 29. 有沒有一種簡單的方法可以將派生Enum的數據類型轉換爲列表?
- 30. 有沒有一種簡單的方法將字符串轉換爲Java中的Inetaddress?
可能不是任何建立快車應用程序和流星應用程序的模型都是如此不同。 – imslavko
我不知道這些標記問題的人想要什麼。對我來說,問題是什麼都很好。如果不是那麼我怎麼能夠回答它?爲了清楚起見,問題不需要太長。 –