-
Notifications
You must be signed in to change notification settings - Fork 10
block
Основной модуль, который компилирует и исполняет блоки, описанные в специальном виде.
Использовать этот модуль можно примерно вот так (упрощенно):
var Block = require('./lib/block.js');
var Context = require('./lib/context.js');
var config = { ... };
require('http')
.createServer( function (req, res) {
var context = new Context(req, res, config);
var root = new Block.Root(context.request.path);
root.run(context).then(function(result) {
context.response.end( result.string() );
});
} )
.listen(2000, '127.0.0.1');
В lib/block.js
определен класс Block
, который самостоятельно не используется,
но является базовым классом для остальных Block.*
классов.
Конструкторы всех этих классов имеют одинаковую сигнатуру:
var block = new Block(block, options);
Первый параметр -- это описание блока, второй -- дополнительные и необязательные параметры. Подробнее.
Вот все блок-классы с соответствующими им функциями:
Block.File file
Block.Http http
Block.Include include
Block.Call call
Block.Value value
Block.Array array
Block.Object object
Block.Function func
Т.е. эти две строчки идентичны:
var block = new Block.File(filename, options);
var block = file(filename, options);
Но. Функция file
(и все остальные) используются только при описании блоков.
В обычном коде используются явный вызов конструктора через new
.
Все блоки имеют метод run
, который возвращает promise.
var block = new Block.File('foo.json');
block.run(context).then(function(result) {
// Сделать что-нибудь с результатом.
});
Здесь result
-- экземпляр класса Result
или Result.*
. См. result.
Хотя "запустить" с помощью метода run
можно любой блок, предполагается, что на самом деле
запускается только блок типа Block.Root
. Это специальный блок-обертка, который запускает
подблоки в порядке, соответствующем приоритетам блоков.