Bir node.js'yi ekspres çerçeve uygulamasıyla meteor'a dönüştürmeye çalışıyorum. Esasen değil otomatik Kesinlikle https://github.com/onmodulus/demeteorizerEkspres bir uygulamayı meteor'a dönüştürmenin kolay bir yolu var mı?
cevap
ters şekilde yapıyor, ancak için birlikte zincir can hileler bir demet neredeyse otomatik olsun vardır.
Sadece bunun üzerinden geçtim ve işte bunun için tüm hilelerim.
Hızlı uygulama ana .js dosyanızla başlayalım.
/server/main.js
: Bu bir üst kısımda aşağıdaki eklemem gerekiyor
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;
}
};
Bütün bunlar hangi daha sonra olacak, bir nesnenin tanımlanmış yolları ihtiyacınız app
işlevleri tanımlamak ve kayıt olduğunu mu Bu yolları iron-router
kullanarak tanımlamak için kullanın. Yani bu aşağıdaki gibi şeyler routes
kaydedilen olsun emin olur:
/server/main.js
: gerçekten ana hüner var
app.get('/show', function(req, res) {
res.render('mytemplate');
});
. Buradan sadece emeği üzerine.
Meteor stilinde, meteor sunucusundaki her şey gibi eşzamanlı hale getirmek için tüm rota görüntülü aramaları bir fibere sarıyoruz. Bunun için, rota fonksiyonlarını sarmak için tekrar tekrar kullanabileceğimiz bir waiter
sarma fonksiyonunu tanımlarız. Ve biz eklediğimizde, meteor sunucusundaki demir yollarından alacağımız bağlantı isteğini ve cevabını, görmek istediğiniz res
ve req
nesnelerine masaj yapacağız. Sakıncası: Bu herhangi bir streç ile tamamlanmış değil. Sadece bu nesnelerden kullanmak istediğim imzalar.
/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);
};
Son olarak, gerçek anlaşma: belirtilen her ekspres yol için yollar oluşturarak. Bunun için iron-router kullanacağız. Aşağıdaki kodu (bizim yeniden tanımlandı app
fonksiyonları tarafından yakalanmış ve routes
saklanan) her tanımlı rota üzerinden gitmek ve ayrıca ifade this.request
/this.response
ve req
ve res
nesneler arasında çeviri ilgilenir ki, bizim waiter
kullanarak bir lif onu sarıp uygulamalar varsayalım.
/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);
}
});
});
});
}
Bunlar Sorduğunuz başarmak için yaptığım en temel şeylerdir. Eminim birkaç detayı kaçırdım, ama bu sana bir fikir vermeli.Post-Spacebars için
Güncellemesi (ben Meteor hangi sürümünü unutma): Amacıyla
bu işi yapmak için, artık handlebars-server eklemeniz gerekir: muhtemelen
meteor add cmather:handlebars-server
bu çok etkileyici bir cevap! – imslavko
- 1. Scala'da, bir vaka sınıfını bir tuple dönüştürmenin kolay bir yolu var mı?
- 2. Scala'da, iki listeyi bir Haritaya dönüştürmenin bir yolu var mı?
- 3. ISO 8601 süresini zaman çizelgesine dönüştürmenin kolay bir yolu var mı
- 4. Koleksiyona diziyi dönüştürmenin en kolay yolu?
- 5. w3c Belgesini jsoup one'a dönüştürmenin kullanışlı bir yolu var mı?
- 6. PHP'de sayıları yazılı sürümlerine dönüştürmenin bir yolu var mı?
- 7. JSONP formatını JSON'a dönüştürmenin herhangi bir yolu var mı?
- 8. JSON Şeması'nı XSD'ye dönüştürmenin bir yolu var mı?
- 9. Blob'u bayt dizisine dönüştürmenin en kolay yolu
- 10. Bir mermi arşivi eserlerini temizlemenin kolay bir yolu var mı?
- 11. 2B sembolleri bir video akışında 3D'ye dönüştürmenin en kolay yolu
- 12. Scaladoc'u IntelliJ Idea'ye entegre etmenin kolay bir yolu var mı?
- 13. jQuery chaining parent(), daha kolay bir yolu var mı?
- 14. Görüntülerin eğimli hale getirilmesinin kolay bir yolu var mı?
- 15. xcode'ta blok değişkenlerini otomatik tamamlamanın kolay bir yolu var mı?
- 16. TypeScript tanımlarını kurmanın kolay bir yolu var mı?
- 17. Symfony'de ServerName'i almanın kolay bir yolu var mı?
- 18. Eclipse emülatörünü kullanarak bir android uygulaması çalıştırmanın daha kolay bir yolu var mı?
- 19. Bir dosyayı bir dosyaya yazmadan Jackson'ı kullanarak JSON temsiline dönüştürmenin bir yolu var mı?
- 20. Bir işlev değişkenini D'deki bir dizeye dönüştürmenin bir yolu var mı?
- 21. Bir SQL Server sorgu planını bir görüntüye programsal olarak dönüştürmenin bir yolu var mı?
- 22. Zaten XSLT'ye bir başvuru içeren bir XDocument'i dönüştürmenin daha verimli bir yolu var mı?
- 23. Bu XML belgesini nesneme dönüştürmenin en kolay yolu nedir?
- 24. Bir Yolu bir * c_char'a dönüştürmenin en doğrudan yolu nedir?
- 25. UTF8'den iso-8859-1'e dönüştürmenin bir yolu var mı?
- 26. Yineleyiciyi bir listeye dönüştürmenin en hızlı yolu
- 27. JSON'u .net dünyasında BSON'a dönüştürmenin en kolay yolu nedir?
- 28. Fotoğraf makinesinin onPreviewFrame öğesinden byte dizisini androiddeki bir resme dönüştürmenin basit bir yolu var mı?
- 29. Greasemonkey komut dosyasını otomatik olarak bir yer imi haline dönüştürmenin bir yolu var mı?
- 30. C# 'da, bir diziyi döngü olmadan Stack <T>'a dönüştürmenin bir yolu var mı?
değil Express uygulaması ve Meteor uygulaması oluşturma modelleri çok farklı olduğundan herhangi bir otomatik yol. – imslavko
Soruyu işaret eden bu kişilerin ne istediğini bilmiyorum. Bana göre, sorunun ne olduğu oldukça güzel. Eğer olmasaydı, nasıl cevap verebilirdim? Bir sorunun net olması için uzun olması gerekmiyor. –