Skip to content
Sergei Nikitin edited this page Sep 1, 2011 · 1 revision

block.js

Основной модуль, который компилирует и исполняет блоки, описанные в специальном виде.

Использовать этот модуль можно примерно вот так (упрощенно):

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. Это специальный блок-обертка, который запускает подблоки в порядке, соответствующем приоритетам блоков.

Clone this wiki locally