Invisible.js — одни модели и на клиенте и на сервере

    Invisible.js — библиотека, позволяющая использовать одни и те же модели данных как на клиенте, так и на сервере. На сервере работает поверх express.js на клиент отдается через browserify.

    Что есть:
    • возможность один раз описать модель (включая типизацию и валидацию) и использовать ее на клиенте и на сервере,
    • связь с MongoDb (при записи на сервере — объект пишется сразу в базу, при записи на клиете, используется RESTful API, автоматически созданное на сервере),
    • хуки на изменение данных (события бегают туда-сюда через socket.io).

    Пример описания модели (будет доступно и на клиенте и на сервере):
    Invisible = require("invisible");
    crypto = require("crypto");
    _s = require("underscore.string");
    
    function Person(firstName, lastName, email){
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
    }
    
    Person.prototype.fullName = function(){
        return this.firstName + ' ' + this.lastName;
    }
    
    Person.prototype.getAvatarUrl = function(){
        cleanMail = _s.trim(this.email).toLowerCase();
        hash = crypto.createHash("md5").update(cleanMail).digest("hex");
        return "http://www.gravatar.com/avatar/" + hash;
    }
    
    module.exports = Invisible.createModel("Person", Person);
    

    Использование на сервере:
    Invisible = require("invisible")
    john = new Invisible.Person("John", "Doe", "john.doe@mail.com");
    john.fullName(); //John Doe
    

    Использование на клиенте:
    <script src="invisible.js"></script>
    <script>
        jane = new Invisible.Person("Jane", "Doe", "jane.doe@mail.com");
        alert(jane.fullName()); //Jane Doe
    </script>
    


    Подробно можно посмотреть на github-страничке.

    П.С. Эта библиотека — прекрасный пример изоморфного JavaScript. Побольше бы такого добра!
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 11
    • +1
      Wcf ria на js. круто.
    • –2
      Воистину, но WCF в .net намного круче =)
      • 0
        А WCF от почти умершего сервелата открутить можно? Ну, чтобы с кодогенерацией и прочим, только на JS?
      • 0
        Даже не смотря в код могу сказать, что не мастабируется больше одного процесса.
        • 0
          Факт. Я больше из-за изоморфного кода запостил. Пытаюсь привлечь внимание.
          • 0
            Вообще, конечно, изоморфная тенденция на лицо. Это не может не радовать.
        • +2
          А вобще существуют какие-то изоморфные модели в которых решен вопрос что не все поля должны быть доступны на клиенте?
          • +1
            Честно не знаю, но искренне удивляюсь тому факту, что большинство разработчиков подобных систем(под nodeJS) вообще особо не заморачивается по поводу защиты данных. Для простеньких «туду-»сайтов может это и приемлимо, но для корпоративных решений необходимо, все-таки, разделение доступа
          • 0
            Пример с сайта:
            Invisible.Person.query({firstName: "Jane"}, function(err, results){
                if (err){
                    console.log("something went wrong");
                } else {
                    console.log("Persons named Jane are:");
                    for (var i = 0; i < results.length; i++){
                        console.log(results[i].fullName());
                    }
                }
            });
            

            Т.е. каждый, кто умеет открывать JS консоль в браузере, может выполнять любые запросы на базе?

            Область применения этой библиотеки довольно узкой получается.
            • 0
              Ну да, она еще игрушечная. Я ее воспринимаю больше, как учебную. Пример изоморфного кода.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.