-
Notifications
You must be signed in to change notification settings - Fork 6
/
index.js
83 lines (68 loc) · 2.2 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
var express = require('express'),
params = require('express-params'),
contacts = require('./contacts'),
Bundle = require('./bundle').Bundle,
bundleIndex = new Bundle('index'),
app = express();
app.use(express.static(__dirname));
app.use(express.static(bundleIndex.path));
params.extend(app);
app.param('id', Number);
app.get('/:id?', bundleIndex.make(), sendContactsHTML);
app.get('/api/contacts/:id?', sendContactsJSON);
['/.bemjson', '/:id.bemjson'].forEach(function(route) { app.get(route, bundleIndex.make(), sendContactsBEMJSON); });
app.listen(3000, function() {
console.log('Express server listening on port 3000');
});
/**
* Отправить сформированный HTML
* @param req
* @param res
*/
function sendContactsHTML(req, res) {
sendContacts(req, res, function(bemjson) {
return bundleIndex.BEMHTML.apply(bemjson);
});
}
/**
* Отправить сформированный BEMJSON
* @param req
* @param res
*/
function sendContactsBEMJSON(req, res) {
sendContacts(req, res, function(bemjson) {
return '<pre>' + JSON.stringify(bemjson, null, 4) + '</pre>';
});
}
/**
* Отправить JSON с данными по контактам или одному контакту
* @param req
* @param res
*/
function sendContactsJSON(req, res) {
contacts.getContacts(req, function(data) {
res.send(data);
});
}
/**
* Отправить HTML-страницу с контактами
* @param req
* @param res
* @param {Function} sender Колбек определяющий преобразование BEMJSON в отправляемые данные
*/
function sendContacts(req, res, sender) {
contacts.getContacts(req, function(data) {
var indexPage = data.length > 1,
params = {
block: 'page',
js: bundleIndex.jsFileName,
css: bundleIndex.cssFileName,
title: indexPage ? 'Все контакты' : data[0].name,
index: indexPage,
contacts: data
};
return bundleIndex.BEMTREE.apply(params).then(function(bemjson) {
res.send(sender.call(this, bemjson));
});
});
}