Maturitní práce
Webové technologie na straně serveru
Jan Kuča
function handleRequest(request, response) {
response.writeHead(200);
response.end('Ahoj!');
}
var server = http.createServer(handleRequest);
server.listen(80);
boot.js
var app = darkside.createApplication(__dirname);
var server = app.createHTTPServer();
server.listen(80);
?
routes.declaration
*
/ = 'front:post:index'
/posts/:id = 'front:post:show'
front = modul, post = controller, index|show = akce
var router = app.router;
router.setRouteDeclaration('./routes.declaration');
server.setRouter(router);
| HTTP Server | Router | Controller Factory | |||
| Post Controller | |||||
var PostController = function (posts) {
this.posts_ = posts;
};
util.inherits(PostController, darkside.ViewController);
PostController.prototype.$deps = [ 'posts' ];
PostController.prototype['index'] = function (params) { … };
/ = 'front:post:index'
/?page=2 → params = { 'page': '2' }
| Global | Dependant | Injector | Dependant | |||
| Bez Dependency Injection | S Dependency Injection | |||||
function () {
var repository = global.Repository.getInstance();
repository.search();
}
function (repository) { ← Lépe testovatelné
repository.search();
}
var PostController = function (posts) {
this.posts_ = posts;
};
PostController.prototype.$deps = [ 'posts' ];
| Controller | View Stack | View | View | ||
| Template | Template | ||||
<%= @promenna %>
<% if @promenna is 'a': %> … <% end %>
<% for post in @posts: %> … <% end %>
@component
<!DOCTYPE html>
<title><%= @component 'title' %></title>
<header>Název aplikace</header> <nav>Menu: ...</nav>
<%= @component 'content' %>
<% @component 'title', => %>Úvodní stránka<% end %>
<% @component 'content', => %>
<p>Vítejte na úvodní stránce aplikace…
<% end %>
one(selector) – vrátí první dokument
all(selector) – vrátí všechny dokumenty
createEntity() – vytvoří prázdnou entitu
save(entity) – uloží danou entitu
services.declaration
database
@ = darkside.MongoDBService
name = 'nazev'
server = 'localhost:27017'
@repositories
posts
var services = app.services;
services.setServiceDeclaration('./services.declaration');
var PostController = function (posts) { … };
PostController.prototype.$deps = [ 'posts' ];
| Request | HTTP Server | Router | Controller Factory | |||
| Database | Post Repository | Post Controller | Response | |||
| Templates | Views | View Stack |
{ "method": "GET", "path": "/", "headers": {} }
{ "status": 200, "headers": [], "body": … }
request a response
connection.emit('message', 'Ahoj!');
connection.on('message', function (message) { … });
darkside.createHTTPServer(https)