Próbuję przekonwertować plik node.js z aplikacją ramek ekspresowych na meteor. Zasadniczo robi odwrotny sposób https://github.com/onmodulus/demeteorizerCzy można łatwo przekonwertować aplikację ekspresową na meteor?
Odpowiedz
zdecydowanie nie automatycznie, ale istnieje kilka sztuczek można łańcuch razem prawie się to automatycznie.
przeszedłem tylko, że i tu są wszystkie moje sztuczki dla tego produktu.
Zacznijmy wyraźnej plik app główne .js. Ten jeden trzeba dodać następujące u góry:
/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;
}
};
Wszystko to nie jest określenie app
funkcje potrzebne i nagrywać zdefiniowanych tras w obiekcie, który będziemy później użyj, aby zdefiniować te trasy, używając iron-router
. Więc to daje pewność, że takie rzeczy jak poniżej nagrane w routes
:
/server/main.js
:
app.get('/show', function(req, res) {
res.render('mytemplate');
});
to naprawdę główny trik. Odtąd na jego sprawiedliwą pracę.
W dobrym stylu meteorów będziemy zawijać wszystkie renderingu połączenia tras w błonnik, aby uczynić je synchroniczne jak wszystko inne na serwerze meteorów. W tym celu definiujemy funkcję owijania waiter
, którą możemy wielokrotnie wykorzystywać do zawijania funkcji trasy. I choć jesteśmy dodać, będziemy masować connect żądanie i odpowiedź, że trafimy z żelaza tras na serwerze meteorytów do res
i req
obiektów wyraźnej chcieliby zobaczyć. Pamiętaj: nie jest to kompletne w żadnym odcinku. To tylko podpisy, których chciałem użyć z tych obiektów.
/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);
};
Wreszcie prawdziwy rarytas: tworzenie tras dla każdej określonej drogi ekspresowej. Do tego użyjemy iron-router. Poniższy kod będzie przejść przez każdego zdefiniowanego trasie (złowione przez naszych przedefiniowanych app
funkcji i przechowywane w routes
) i owinąć go w błonnik Korzystanie z naszych waiter
, który będzie również dbać o tłumaczenia między this.request
/this.response
i req
i res
obiektów wyrazić aplikacje przyjmują.
/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);
}
});
});
});
}
Są to najbardziej podstawowe rzeczy robiłem, aby osiągnąć to, co prosicie o. Jestem pewien, że przegapiłem kilka szczegółów tutaj, ale to powinno dać ci pomysł.
Aktualizacja dla post-Spacebars (nie pamiętam która wersja Meteor to było):
aby uczynić tę pracę, teraz trzeba dodać handlebars-server:
meteor add cmather:handlebars-server
nie
To bardzo imponująca odpowiedź! – imslavko
- 1. Czy można uruchomić aplikację Meteor z węzłem zamiast meteoru?
- 2. Jak przekonwertować kolekcję plików cookie na ogólną listę? Łatwo
- 3. Jak szybko i łatwo przekonwertować dane arkusza kalkulacyjnego na JSON?
- 4. Czy ktoś z powodzeniem wdrożył aplikację węzła (ekspresową) w usłudze Amazon OpsWorks?
- 5. Jak przekonwertować aplikację konsoli na plik .dll?
- 6. Szyny - Można przekonwertować plik PDF na obrazy?
- 7. Łatwo na kołowrotku
- 8. Czy w pytonie można łatwo ekstrapolować punkty danych do przyszłości?
- 9. Czy można łatwo subskrybować domyślną kolejkę błędów w programie EasyNetQ?
- 10. Jaką usługę można łatwo osadzić na stronie internetowej?
- 11. Czy można uruchomić aplikację wielowątkową na pojedynczym rdzeniu komputera wielordzeniowego?
- 12. Czy można skompilować aplikację/grę Sprite Kit na iOS 6?
- 13. Czy można utworzyć aplikację na iPhone'a bez produktów Apple?
- 14. Czy można nagrywać rozmowy przez aplikację na Androida?
- 15. Nie można przekonwertować tablicy na ruch pytonu
- 16. Rozmieszczanie aplikacji Meteor przez Meteor Up lub tmux meteor
- 17. Czy można uruchomić aplikację WPF w przeglądarce?
- 18. Czy można przekonwertować boost :: system :: error_code na std: error_code?
- 19. PHP sprawdza, czy obiekt można przekonwertować na liczbę całkowitą?
- 20. Czy można przekonwertować kolor rgba na hex za pomocą LESS
- 21. Czy tabele bazy danych systemu MySQL można przekonwertować na InnoDB?
- 22. Jak mogę zorganizować moją aplikację ekspresową, w której muszę tylko raz otworzyć połączenie mongodb?
- 23. Meteor DOMException: Nie można dekodować danych dźwiękowych
- 24. Jak przekonwertować istniejącą aplikację Rails 3 na silnik?
- 25. Czy Haskell może (łatwo) wykonywać COM?
- 26. Jak można przekonwertować cdt na pliki Makefile?
- 27. nie można przekonwertować na nil Array will_paginate
- 28. NSJSONSerialization - Nie można przekonwertować danych na ciąg
- 29. Czy można łatwo kopiować ustawienia aplikacji z jednej aplikacji internetowej na platformę Azure
- 30. TypeError: nie można przekonwertować ciąg na Integer
prawdopodobnie w zautomatyzowany sposób, w jaki modele budowania aplikacji Express i Meteor są tak różne. – imslavko
Nie wiem, czego chcą te osoby, które zgłosiły to pytanie. Dla mnie to całkiem sprytne, jakie jest pytanie. Gdyby tak nie było, w jaki sposób byłbym w stanie na nie odpowiedzieć? Pytanie nie musi być długie, aby było jasne. –