Прежде всего, я должен признать, что как Java-разработчик с более чем десятилетним опытом разработки я сформировал собственные процедуры для решения большинства проблем, хотя они часто кажутся громоздкими и громоздкими. Например, если вы хотите прочитать файл, вам следует инициализировать экземпляр BufferedReader и передать ему FileReader. Это почти логично. Я писал такой код во многих проектах, которые считаю «корпоративными», и мне он очень нравится. много, можно сказать, что я просто фанатик Java, презирающий другие языки.
Если вы читаете этот пост в блоге, возможно, вы впали в недоразумение, в которое я впал много лет назад. Как квалифицированный разработчик, вы должны постоянно изучать новые технологии и выбирать подходящие технологии, исходя из реальных потребностей работы. Хотя я становлюсь старше и, возможно, однажды мне надоест Java. Но сейчас я действительно открыл для себя новую интересную вещь: node.js похож на ребенка, который дарит мне новую игрушку. В этом сообщении блога я сначала покажу вам, как создать простой Rest с использованием службы Java EE для чтения базы данных MongoDB. Затем я буду использовать node.js для достижения той же функциональности, и вам будет легче понять восторг от этого нового языка разработки.
Начните с основ — что такое Node.js?
Прежде всего, я хочу прояснить, что Node.js — это не «модный» язык, которым пользуются только «модные люди». Хотя все началось с этого понимания, я рад сообщить, что Node.js — это зрелый язык, и в нынешнюю эпоху Интернета он нашел свое применение на крупных предприятиях, обеспечивая некоторые веб-сайты с самым высоким трафиком. Node.js — очень полезный инструмент для вашего набора навыков. Он удивит вас тем, насколько легко создавать стабильный, безопасный и производительный код.
Короче говоря, Node — это язык для действий на стороне сервера. Он использует язык Javascript, и доступно множество библиотек, таких как модели npm. Вы можете сравнить эти модели npm с пакетами .jar в Java. Если вам нужна часть функциональности и вам не хочется писать весь код самостоятельно, скорее всего, функция, которую вы ищете, уже предусмотрена в модели npm.
Приложения Node обычно выполняются для максимизации эффективности за счет использования преимуществ неблокирующего ввода-вывода и асинхронных событий. Разработчикам Java необходимо знать одну вещь: приложения Node выполняются в одном потоке. Однако код внутреннего узла использует несколько потоков для таких операций, как доступ к сети и файлам. По этой причине Node идеально подходит для приложений, требующих работы в режиме реального времени.
Продолжить — поддержка IDE
Вы можете, как и я, «жить» и «дышать» в IDE. Это может быть связано с тем, что Java слишком многословна и требует от нас написания постоянного кода для выполнения функций в процессе разработки программного обеспечения. Как только мы обнаружили преимущества автодополнения кода, мы постепенно научились использовать IDE для управления файлами, отладки и других очень полезных функций. Достаточно сказать, что я люблю использовать IDE и продолжаю использовать ее при работе с Nodeb. Ниже представлена первая партия IDE, которые в настоящее время поддерживают Node:
1. Eclipse. С ним должно быть легко начать, если вы уже используете его на Java. Просто установите плагин Node.js.
2.JetBrains IntelliJ IDEA — очень популярная коммерческая IDE. На данный момент это моя любимая IDE.
3.Microsoft Visual Studio. Да, вы правильно прочитали. Node вырос до такой степени, что Microsoft добавила для него встроенную поддержку в Visual Studio. Эта реализация очень стабильна, и VS — моя вторая любимая среда разработки. Как ни странно, я использую VS только для некоторых базовых проектов Node.
4.CodeEnvy — веб-IDE.
5.Cloud9 — веб-IDE.
6.SublimeText 2 — текстовый редактор без излишеств, который становится все более популярным среди разработчиков благодаря своему легкому весу.
Это одни из моих любимых IDE для работы над проектами на базе Node. Просто пример.
Начните с примера
В оставшейся части этой статьи мы создадим простой сервис REST с использованием Java EE и Node.js. Этот сервис REST просто считывает информацию из базы данных MongoDB и возвращает результаты запрашивающей стороне. Установка и настройка сервера приложений Java и базы данных MongoDB выходят за рамки этой статьи.
Создайте наше Java-приложение
Шаг 1. Настройте файл pom.xml.
Назовем этот пример restexample, и я буду использовать сервер приложений JBoss EAP. Первое, что нам нужно сделать, это настроить наш файл pom.xml для управления зависимостями с помощью системы сборки Maven. Ниже приведен файл pom.xml, содержащий зависимости, необходимые для нашего приложения restexample:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http:/ /maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>restexample</groupId> <artifactId>restexample</artifactId> <packaging>war</packaging> <version>1.0</version> <name>restexample</name> <repositories> <repository> <id>eap</id> <url>http://maven.repository.redhat.com/techpreview/all</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>eap</ id> <url>http://maven.repository.redhat.com/techpreview/all</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven .compiler.source>1.6</maven.compiler.source> <maven.compiler.target>1.6</maven.compiler.target> </properties> <зависимости> <зависимость> <groupId>org.jboss.spec</groupId> <artifactId>jboss-javaee-6.0</artifactId> <version>3.0.2.Final-redhat-4</version> <type>pom</type> <scope>предоставлен</scope> </dependent> <dependent> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>2.9.1</version> </dependent> </dependents> </project>
Круто, довольно подробно, но я надеюсь, что вы сможете понять код. В этом посте я предполагаю, что читатели уже знают Java, поэтому не буду объяснять детали.
Шаг 2. Создайте файл beans.xml и настройте отображение сервлетов.
В рамках примера мы будем использовать CDI (внедрение контекстных зависимостей) в нашем классе доступа к базе данных. Согласно официальным инструкциям по настройке CDI, если приложение хочет использовать CDI, оно должно включить файл beans.xml в каталог WEB-INF приложения. Итак, давайте создадим этот файл и настроим его с необходимой нам информацией. Перейдите в каталог /src/main/webapp/WEB-INF, создайте файл beans.xml и добавьте следующий код:
<?xml version="1.0"?><beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema- экземпляр" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://jboss.org/schema/cdi/beans_1_0.xsd"/>
Нам также необходимо настроить сопоставление сервлетов для нашего RESI API в файле web.xml. Добавьте следующий элемент сопоставления сервлетов в файл в каталоге /src/main/webapp/WEB-INF:
<servlet-mapping> <servlet-name>javax.ws.rs.core.Application</servlet-name> <url-pattern>/ws/*</url-pattern></servlet-mapping>
Шаг 3. Создайте класс DBConnection.
На этом этапе мы настроили проект, и наш файл pom.xml уже содержит зависимости драйверов базы данных MongoDB. Не забудьте убедиться, что необходимые драйверы упакованы в наше приложение. Следующее, что нам нужно сделать, это создать класс для управления подключением к базе данных. Создайте новый файл с именем DBConnection.java, поместите его в каталог /src/main/java/com/strongloop/data, а затем добавьте в этот файл следующий код:
ПРИМЕЧАНИЕ. Убедитесь, что ваша установка базы данных MongoDB настроена с использованием соответствующих данных авторизации подключения!
пакет com.strongloop.data; импорт javax.annotation.PostConstruct; импорт javax.enterprise.context.ApplicationScoped; импорт com.mongodb.DB; ; @Named@ApplicationScopedpublic класс DBConnection {частная БД mongoDB; DBConnection() { super(); } @PostConstruct public void afterCreate() { String mongoHost = "127.0.0.1" String mongoPort = "27001" String mongoUser = "strongloop; String mongoPassword = "rocks"; String mongoDBName = "restexample" ; int port = Integer.decode(mongoPort Монго =); null; try { mongo = new Mongo(mongoHost, port); } catch (UnknownHostException e) { System.out.println("Не удалось подключиться к MongoDB: " + e.getMessage() + " :: " + e. getClass()); } mongoDB = mongo.getDB(mongoDBName); если (mongoDB.authenticate(mongoUser, mongoPassword.toCharArray()) == false) { System.out.println("Не удалось аутентифицировать БД"); } } public DB getDB() { return mongoDB;Шаг 4. Импортируйте данные в MongoDB (мммм пиво)
В нашем проекте мы хотим загрузить список всех сортов пива с названием Pabst. Если вы новичок в пивной индустрии, возможно, вы захотите попробовать американский светлый эль от Pabst Brewing. Это пиво украшено голубыми лентами и дизайном Colt, а также включает в себя все виды солодовых напитков.
Сначала вам нужно скачать json-файл, содержащий все данные, которые необходимо вернуть. Для этого вы можете использовать следующий URL-адрес:
https://dl.dropboxusercontent.com/u/72466829/beers.json
После загрузки используйте команду mongoimport, чтобы импортировать ее в базу данных. Команда выглядит следующим образом:
$ mongoimport --jsonArray -d yourDBName -c beers --type json --file /tmp/beers.json -h yourMongoHost --port yourMongoPort -u yourMongoUsername -p yourMongoPassword
Вы можете увидеть следующие результаты:
подключен к: 127.0.0.1:27017Вт 10 июня 20:09:55.436 проверить 9 24Вт 10 июня 20:09:55.437 импортировано 24 объекта
Шаг 5: Создайте объект модели пива
Мы создали класс подключения к базе данных и загрузили информацию о пиве в базу данных MongoDB. Пришло время создать объект модели для управления нашей информацией о пиве. Создайте новый файл с именем Beer.java и поместите его в каталог /src/main/java/com/strongloop/data. После создания файла добавьте в него следующий код:
пакет com.strongloop.data; общественный класс Beer {частное имя строки; описание частной строки; public String getId () { return id; } public void setId (String id) { this.id = id } getName () { возвращаемое имя; } public void setName (имя строки) { this.name = name; public String getDescription () { возвращаемое описание; } public void setDescription (описание строки) { это.описание = описание }}Примечание. Предоставленный файл JSON содержит дополнительную информацию, которую мы будем использовать, поэтому ознакомьтесь с ним и добавьте к нему дополнительные функции, чтобы расширить ваш опыт обучения.
Шаг 6. Создайте службу REST.
Угадайте, что делать? Хорошо, мы наконец готовы создать веб-сервис на основе REST, который позволит нам загружать информацию о пиве на предыдущем шаге. Для этого нам нужно создать новый файл с именем BeerWS.java и поместить его в каталог /src/main/java/com/strongloop/webservice. После его создания добавьте следующий код:
пакет com.strongloop.webservice; импорт java.util.ArrayList; импорт java.util.List; импорт javax.enterprise.context.RequestScoped; импорт javax.inject.Inject; импорт javax.ws.rs.GET; импорт javax.ws .rs.Path;импорт javax.ws.rs.Produces;импорт javax.ws.rs.QueryParam;импорт com.strongloop.data.DBConnection; импорт com.strongloop.data.Beer; импорт com.mongodb.BasicDBObject; импорт com.mongodb.DB; импорт com.mongodb.DBCollection; импорт com.mongodb.DBCursor; импорт com.mongodb. DBObject @RequestScoped@Path("/beers") общедоступный класс BeerWS {; @Inject Private DBConnection dbConnection; Private DBCollection getBeerCollection () { DB db = dbConnection.getDB (); DBCollection BeerCollection = db.getCollection («пиво»); return BeerCollection; } Private Beer populateBeerInformation (DBObject dataValue) { Пиво theBeer = новое пиво (); theBeer.setName(dataValue.get("name")); theBeer.setDescription(dataValue.get("name")); theBeer.setId(dataValue.get("_id").toString()); // Получаем все сорта пива @GET() @Produces("application/json") public List<Beer> getAllBeers() { ArrayList<Beer> allBeersList = новый ArrayList<Beer>(); DBCollection Beers = this.getBeerCollection(); DBCursor курсор = beers.find(); try { while (cursor.hasNext()) { allBeersList.add(this.populateBeerInformation(cursor.next) ())) } } наконец {cursor.close() } return allBeersList }};Шаг 7: Глупый просмотр информации о пиве
О, готово. Мы написали REST-сервис, который может получать всю информацию о пиве из базы данных. Теперь, чтобы развернуть свой код на сервере приложений, откройте в браузере следующий адрес и проверьте, работает ли он нормально:
http://yourserverlocation/ws/beers
Если все в порядке, вы увидите список всей информации о пиве, как показано ниже:
Создать приложение Node
Если вы выполните описанные выше шаги для программирования на Java, вы поймете, что, хотя создание приложений с использованием javaEE продвигается очень быстро, создание простого приложения, такого как служба REST, по-прежнему очень затруднительно. Не поймите меня неправильно: мне по-прежнему нравится использовать javaEE, но я считаю, что для многих сценариев, таких как создание служб REST, возвращающих данные в формате JSON, Node больше подходит. Далее мы собираемся создать простой веб-сервис, используя API StrongLoop LoopBack. Кроме того, я покажу вам, как установить Node на Apple OSX.
Шаг 1. Установите узел
Самый простой способ установить Node — использовать двоичный пакет, совместимый с большинством операционных систем. Откройте браузер и посетите веб-страницу ниже, чтобы загрузить версию, соответствующую вашей операционной системе:
http://nodejs.org/download/
После завершения загрузки вы увидите следующее:
Если вы используете Mac OSX, щелкните общий файл .pkg. Установщик будет сохранен на вашем компьютере. После загрузки файла дважды щелкните его, чтобы запустить программу установки. Вы увидите следующее диалоговое окно установки:
Продолжите установку по умолчанию. После успешной установки нажмите кнопку закрытия, чтобы выйти из программы установки.
Довольно просто, правда?
Шаг 2. Установите LoopBack с помощью NPM.
Теперь, когда Node установлен в локальной системе, следующим шагом будет установка пакета LoopBack, предоставленного StroopLoop. LoopBack — это пакет исходного кода с открытым API. Когда вы научитесь использовать Node для разработки и развертывания программного обеспечения, LoopBack может упростить программирование.
Чтобы установить LoopBack, мы будем использовать командную строку npm, которая является частью основного языка Node. NPM — это официальный инструмент управления пакетами, используемый для установки библиотек классов или шаблонов, от которых зависят приложения. Если вы Java-программист, вы можете сравнить NPM с Maven. Используя Maven для создания проекта, разработчики могут настраивать пакеты jar или шаблоны, от которых зависит проект, в pom.xml. Когда проект начнет компилироваться, Maven загрузит все зависимые файлы и внесет в проект пакет jar. NPM работает так же, как Maven. В некоторых специальных проектах он использует файл package.json для настройки файлов, от которых зависит проект. Вы также можете использовать командную строку для загрузки зависимых файлов в локальную систему. Если вы этого не понимаете, не волнуйтесь, мы подробно опишем файл package.json в следующих шагах.
Чтобы установить LoopBack, мы используем простую командную строку для загрузки и установки всех зависимых файлов. Откройте окно командной строки вашего окна и введите следующую команду:
$ npm install -g Strongloop
Совет: Во время установки вам может потребоваться использовать другую учетную запись пользователя для выполнения этой команды.
Что означает эта командная строка? Параметр -g сообщает npm, что мы хотим установить пакет Strong-cli. Параметр -g делает этот пакет совместимым с любой системой и приложением. После запуска указанной выше команды NPM загрузит все зависимые файлы. Время загрузки зависит от скорости вашего интернета и может занять несколько минут.
Шаг 3. Создайте приложение.
Создать приложение с использованием LoopBack API очень просто. Откройте окно командной строки вашего окна и используйте следующую команду, чтобы создать новый пример восстановления приложения.
$ slc петля
Далее будет предложено ввести имя корневого пути проекта. В этом примере используется restexample. Далее будет предложено ввести имя приложения. Используйте пример восстановления по умолчанию.
Теперь команда slc создала приложение LoopBack с именем restexample и настроила его. Если вы снова выполните приведенную выше команду и по-прежнему используете restexample для ее имени, LoopBack создаст новый каталог. Вы можете использовать команду cd для изменения корневого пути приложения.
$ cd пример восстановления
Теперь, когда мы создали приложение, мы настраиваем MongoDB в качестве источника данных для приложения.
Шаг 4. Определите источник данных
Чтобы подключиться к MongoDB, нам нужно добавить в приложение источник данных и выполнить следующую команду:
$ slc петля: источник данных
Во всплывающем окне вы можете ввести любое настраиваемое имя источника данных. Здесь выберите myMongo.
[?] Введите имя источника данных: myMongo.
Таким образом мы прикрепляем определение источника данных бэкэнда к реальному коннектору на базе StrongLoop. Здесь мы выбираем коннектор MongoDB из списка.
[?] Выберите коннектор для myMongo:PostgreSQL (поддерживается StrongLoop)Oracle (поддерживается StrongLoop)Microsoft SQL (поддерживается StrongLoop)MongoDB (поддерживается StrongLoop)Веб-службы SOAP (поддерживается StrongLoop)Службы REST (поддерживается StrongLoop)Neo4j ( предоставлено сообществом) (Двигайтесь вверх и вниз, чтобы открыть больше вариантов)
Шаг 5. Укажите реальный источник данных
Чтобы подключиться к MongoDB, нам нужно указать фактический экземпляр MongoDB. LoopBack определяет всю информацию о конфигурации источника данных в файле datasource.json. Этот файл находится в корневом каталоге/серверном каталоге приложения. Откройте этот файл и продолжите. MongoDB добавляет источник данных:
{ "db": { "name": "db", "connector": "memory" }, "myMongo": { "name": "myMongo", "connector": "mongodb" "url": "mongodb: //localhost:27017/restexample" }}Примечание. Обязательно укажите правильный URL-адрес подключения к базе данных MongoDB. В этом примере я создал базу данных с именем restexample, которая используется в качестве источника данных.
Шаг 6. Импортируйте данные в MongoDB (ммммм пиво)
Как упоминалось в части этой статьи, посвященной Java, нам необходимо загрузить набор данных в базу данных MongoDB. Если вы выполнили этот шаг в соответствии с методом, упомянутым в этой статье, а затем планируете использовать ту же базу данных, вы можете пропустить этот шаг. 6 и сразу переходите к шагу 7.
Сначала вам необходимо загрузить файл JSON, содержащий всю возвращаемую информацию, которую можно получить по следующему URL-адресу:
https://dl.dropboxusercontent.com/u/72466829/beers.json
После загрузки файла набора данных напрямую используйте следующую команду mongoimport, чтобы загрузить его в базу данных:
$ mongoimport --jsonArray -d yourDBName -c beers --type json --file /tmp/beers.json -h yourMongoHost --port
Вы должны увидеть следующие результаты:
подключен к: 127.6.189.2:27017Вт 10 июня 20:09:55.436 проверить 9 24Вт 10 июня 20:09:55.437 импортировано 24 объекта
Шаг 7: Создайте собственную модель пива
В мире Java мы можем думать об объектной модели. Она представляет этот объект, но здесь этот объект представляет собой пиво. LoopBack предоставляет простой способ создания объектов модели через командную строку. Откройте окно терминала и войдите в папку проекта. введите следующую команду:
$ slc петля: модель
Откроется интерактивный сеанс для определения модели. Первое, что вам нужно ввести, это имя модели, введите здесь «пиво». Далее вам будет предложено указать источник данных, к которому должна быть прикреплена эта модель. Здесь выберите. источник данных myMongo, созданный ранее.
[?] Введите название модели: пиво[?] Выберите источник данных для присоединения пива: db (память)myMongo (mongodb)
Далее предлагается, выставлять ли этот API через REST. Конечно, мы на это надеемся.
[?] Выставлять пиво через REST API Да?
Наконец, выберите имя сети во множественном числе для модели. Здесь модель называется «пиво», поэтому множественное число — «бобы» (по умолчанию). Нажмите Enter, чтобы принять значение по умолчанию.
[?] Пользовательская форма множественного числа (используется для создания REST URL):
Далее вам будет предложено определить свойства модели. В этом примере программы мы сосредоточимся на названии и описании пива.
По завершении введите пустое имя свойства.[?] Имя свойства: имя
Пока вы нажимаете Enter, вам будет предложено ввести тип данных каждого указанного атрибута. Первый элемент — имя, здесь выберите тип строки. Выберите тип строки, а затем нажмите.
Введите.[?] Тип свойства: (Используйте клавиши со стрелками)stringnumberbooleanobjectarraydatebuffergeopoint(other)
Затем таким же образом создайте атрибут описания, после чего вам будет предложено ввести тип данных. Это также строковый тип, выберите параметр строки и нажмите кнопку.
Enter.Давайте добавим еще одно свойство пива. Когда закончите, введите пустое имя свойства.[?] Имя свойства:descriptioninvokeloopback:property[?]Тип свойства: строка[?] Требуется Да?
Поздравляем! Вы завершили создание объектов модели с помощью LoopBack в сочетании с Node. Если вы хотите увидеть, что на самом деле было создано во время этого процесса, вы можете открыть файл Beer.json, расположенный в корневом каталоге приложения/common/models, и перейти к нему. конце файла вы увидите следующую модель:
{ "name": "пиво", "base": "PersistedModel", "properties": { "name": { "type": "string", "required": true }, "description": { "type" : "строка", "обязательно": true } }, "проверки": [], "отношения": {}, "acls": [], "методы": []}Как вы можете видеть здесь, мы создали модель, и в то же время этой модели были присвоены атрибуты имени и описания.
В файле /server/model-config.js вы можете заметить, что файл содержит несколько дополнительных полей, включая public и datasource. Поле public указывает, что мы хотим предоставить эту модель внешнему миру через сетевой сервис REST. Поле — Укажите источник данных, который будет использоваться для операций CRUD в этой модели.
"пиво": { "dataSource": "myMongo", "public": true }Шаг 8: Наслаждайтесь пивом
Поздравляем! Вы создали свое первое приложение Node.js, содержащее веб-сервис REST, который может получать информацию о пиве. Наконец, все, что нам нужно сделать, это развернуть приложение.
К счастью, развертывание уже легко. Это можно сделать, выполнив следующую команду в корневом каталоге приложения:
$ SLC запустить
Как только приложение запустится, вы можете подтвердить успешность развертывания, перейдя в браузере по следующему URL-адресу:
http://0.0.0.0:3000/api/beers
Довольно круто, не так ли?
LoopBack также содержит страницу, которая позволяет вам просмотреть все доступные службы приложения, включая модель Beer и созданную нами службу REST. Для просмотра укажите в браузере следующий URL-адрес:
http://0.0.0.0:3000/эксплорер
После успешной загрузки страницы вы увидите следующий интерфейс. Мы создали узел bean-компонентов как часть блога. Я выделил конечную точку /beers:
Вы можете нажать /beers, чтобы развернуть доступные API. Вы можете управлять ими и тестировать их, как показано на рисунке ниже:
в заключение
В этом сообщении блога я покажу, как использовать Java EE для создания службы REST, которая возвращает данные о списке продуктов пива от Pabst Beer Company. Позже я использовал node.js и фреймворк обратной связи на основе node.js, чтобы реализовать оставшуюся службу с той же функцией, используя очень мало кода. Самое главное, что LoopBack API также предоставляет реализацию по умолчанию для добавления, удаления, проверки и изменения пивных сущностей, так что мы можем получить сервис отдыха с полными функциями добавления, удаления, проверки и модификации, не написав ни единой строки. кода.
В следующем списке сравниваются соответствующие функции javaEE и node.js, упомянутые в сообщении блога:
Особенность | Java EE | Node.js |
Полная поддержка IDE | Да, доступно несколько IDE, включая Eclipse, Sublime и Idea. | Да, несколько IDE на выбор: Visual Studio, Eclipse, Sublime. |
Управление зависимостями | Мавен | НПМ |
Используется проектами корпоративного уровня | Да | Да |
Обширная экосистема компонентов | Да | Да |
Требуется JVM | Да | Нет |
Общая структура разработки | Весна, ДЖИ | Выражать |
Поддержка базы данных | Да | Да |
ORM-фреймворк | Да | Да |
среда тестирования | Да | Да |
Что дальше?
Предстоящая версия Node 0.12 принесет как минимум 8 интересных новых функций. Какими они будут? Посетите страницу «Что нового в Node.js v0.12», чтобы узнать больше.
Заинтересованы в обучении и сертификации, связанных с Node? StrongLoop предлагает различные услуги для удовлетворения ваших потребностей.