node.js — вопросы с ответами

16 ответов
После того, как я обновился до последних стабильных node и npm, я попробовал npm install moment --save. Он сохраняет запись в package.json с префиксом caret(^). Раньше это был префикс tilde(~). Почему эти изменения сделаны в npm? В чем разница между tilde(~) и caret(^)? В чем преимущества над дру...
12 март 2014, в 05:04
4 ответа
У меня есть настройка с участием Внешний сервер (Node.js, domain: localhost: 3000) < --- > Backend (Django, Ajax, domain: localhost: 8000) Browser < - webapp < - Node.js(обслуживать приложение) Браузер (webapp) → Ajax → Django (подавать запросы POST ajax) Теперь моя проблема ...
cors
django-cors-headers
02 нояб. 2013, в 14:29
36 ответов
Я пытаюсь получить сумму 1 + 2 + ... + 1000000000, но я получаю смешные результаты в PHP и Node.js. PHP $sum = 0; for($i = 0; $i <= 1000000000 ; $i++) { $sum += $i; } printf("%s", number_format($sum, 0, "", "")); // 500000000067108992 Node.js var sum = 0; for (i = 0; i <= 1000000000...
integer-overflow
precision
integer-arithmetic
04 авг. 2013, в 18:07
32 ответа
Я скопировал package.json из другого проекта и теперь хочу поднять все зависимости к их последним версиям, так как это новый проект, и я не против исправления чего-то, если он сломается. Какой самый простой способ сделать это? Лучший способ, которым я знаю сейчас, - запустить npm info express versio...
18 апр. 2013, в 03:15
6 ответов
Я разрабатываю приложение, используя node.js. В этом я готов использовать SQLite как встроенную базу данных. Я искал онлайн для модулей SQLite npm. Я нашел различные модули: https://github.com/grumdrig/node-sqlite https://github.com/orlandov/node-sqlite https://github.com/developmentseed/node-sql...
sqlite3
16 янв. 2013, в 07:35
4 ответа
Я переписываю проект для использования Node.js. Я бы хотел использовать MySQL в качестве базы данных (хотя я не против переписывать схему). Я ищу простую в использовании и разумную производительность ORM, которая поддерживает отношения кэширования, много-к-одному и многие-ко-многим. Из MySQL ORM, ко...
15 май 2011, в 09:17
10 ответов
Я только начал входить в Node.js. Я исхожу из фона PHP, поэтому я довольно часто использую MySQL для всех потребностей моей базы данных. Как я могу использовать MySQL с Node.js?
28 апр. 2011, в 13:19
10 ответов
Какова цель Node.js module.exports и как вы ее используете? Я не могу найти никакой информации об этом, но, похоже, это довольно важная часть Node.js, как я часто вижу в исходном коде. Согласно Node.js документации: модуль Ссылка на текущий module. В частности, module.exportsсовпадает с объектом ...
15 март 2011, в 10:53
17 ответов
Я новичок в этом, но в последнее время я много слышал о том, насколько хорош Node.js. Учитывая, насколько мне нравится работать с jQuery и JavaScript в целом, я не могу не задаться вопросом, как решить, когда использовать Node.js. Веб-приложение, которое я имею в виду, это что-то вроде Bitly - заним...
web-applications
design
21 фев. 2011, в 04:22
7 ответов
Есть ли способ прочитать переменные окружения в коде Node.js? Например, Python os.environ['HOME'].
environment-variables
02 фев. 2011, в 03:14
29 ответов
У меня есть веб-сервер, написанный в Node.js, и я хотел бы запустить его с определенной папкой. Я не уверен, как обращаться к аргументам в JavaScript. Я запускаю node следующим образом: $ node server.js folder здесь server.js - мой код сервера. Node.js help говорит, что это возможно: $ node -h Usag...
arguments
command-line-arguments
04 дек. 2010, в 02:36
27 ответов
Если я определил объект в JS с помощью: var j={"name":"binchen"}; Как преобразовать объект в JSON? Строка вывода должна быть: '{"name":"binchen"}'
string
object
12 нояб. 2010, в 08:11
16 ответов
Я пытаюсь найти способ записи в файл при использовании Node.js, но без успеха. Как я могу это сделать?
file
express
fs
23 март 2010, в 00:54
3 ответа
Есть ли хорошие ресурсы для начала работы с Node.JS? Любые хорошие учебники, блоги или книги? Конечно, я посетил его официальный сайт http://nodejs.org/, но я не думал, что у них есть хорошая отправная точка.
01 март 2010, в 03:10
35 ответов
Как отлаживать серверное приложение Node.js? В настоящее время я в основном использую отладочную информацию с инструкциями печати следующим образом: sys.puts(sys.inspect(someVariable)); Должен быть лучший способ отладки. Я знаю, что Google Chrome имеет отладчик командной строки. Этот отладчик досту...
google-chrome-devtools
debugging
15 дек. 2009, в 23:14

Подробнее о node.js

В традиционном подходе к созданию веб-серверов для каждого входящего запроса или подключения сервер порождает новый поток выполнения или даже создает новый процесс для обработки запроса и отправки ответа. Концептуально это имеет смысл, но на практике это приводит к большим накладным расходам.

Хотя родительские потоки потребляют меньше памяти и ресурсов процессора, чем процессы разветвления, они все равно могут быть неэффективными. Присутствие большого количества потоков может привести к тому, что сильно загруженная система потратит драгоценные циклы на планирование потоков и переключение контекста, что увеличивает задержку и накладывает ограничения на масштабируемость и пропускную способность.

Механика работы

Node.js использует другой подход. Он запускает однопоточный цикл обработки событий, зарегистрированный в системе, для обработки соединений, и каждое новое соединение вызывает срабатывание функции обратного вызова JavaScript. Функция обратного вызова может обрабатывать запросы с неблокирующими вызовами ввода-вывода и, при необходимости, может порождать потоки из пула для выполнения блокирующих или ресурсоемких операций и для балансировки нагрузки между ядрами процессора. Подход Node к масштабированию с использованием функций обратного вызова требует меньше памяти для обработки большего количества соединений, чем большинство конкурирующих архитектур, которые масштабируются с потоками, включая Apache HTTP Server, различные серверы приложений Java, IIS и ASP.NET, а также Ruby on Rails.

Node.js оказывается весьма полезным для настольных приложений в дополнение к серверам. Также обратите внимание, что Node-приложения не ограничены чистым JavaScript. Вы можете использовать любой язык, который переносится в JavaScript, например TypeScript и CoffeeScript. Node.js включает в себя движок Google Chrome V8 JavaScript, который поддерживает синтаксис ECMAScript 2015 (ES6) без необходимости использования транспортера ES6-to-ES5, такого как Babel.

Большая часть функционала Node происходит из его большой библиотеки пакетов, которая доступна из команды npm. NPM, менеджер пакетов Node, является частью стандартной установки Node.js, хотя у него есть собственный веб-сайт.

Базовая архитектура Node.js

На высоком уровне Node.js сочетает в себе механизм JavaScript Google V8, однопоточный неблокирующий цикл событий и низкоуровневый API ввода-вывода. Приведенный ниже урезанный пример кода иллюстрирует базовый шаблон HTTP-сервера с использованием функций стрелок ES6 (анонимные лямбда-функции, объявленные с использованием “толстой” стрелочной функции, =>) для обратных вызовов.

Начало кода загружает модуль HTTP, устанавливает переменную hostname сервера в localhost (127.0.0.1) и устанавливает переменную port в 3000. Затем он создает сервер и функцию обратного вызова, в данном случае функцию толстой стрелки, которая всегда возвращает один и тот же ответ на любой запрос: statusCode 200 (успех), простой текст с типом содержимого и текстовый ответ «Hello Worldn». Наконец, он сообщает серверу прослушивать порт localhost 3000 (через сокет) и определяет обратный вызов для печати сообщения журнала на консоли, когда сервер начал прослушивание. Если вы запустите этот код в терминале или консоли, используя команду узла, а затем перейдите к localhost:3000 с помощью любого веб-браузера на том же компьютере, вы увидите «Hello World» в своем браузере. Чтобы остановить сервер, нажмите Control-C в окне терминала.

Обратите внимание, что каждый вызов, сделанный в этом примере, является асинхронным и неблокирующим. Функции обратного вызова появляются в ответ на события. Обратный вызов createServer обрабатывает событие запроса клиента и возвращает ответ. Обратный вызов listen обрабатывает событие прослушивания.

Библиотека Node.js

Node.js имеет большой набор функций в своей библиотеке. Модуль HTTP, который мы использовали в примере кода ранее, содержит классы клиента и сервера. Функциональность сервера HTTPS с использованием TLS или SSL находится в отдельном модуле.

Одной из присущих однопоточному циклу событий проблем является отсутствие вертикального масштабирования, поскольку поток цикла событий будет использовать только одно ядро ЦП. Между тем, современные процессорные чипы часто имеют восемь ядер, а современные серверные стойки часто имеют несколько процессорных чипов. Однопоточное приложение не будет в полной мере использовать преимущества 24 ядер в мощной серверной стойке.

Вы можете это исправить, хотя это и потребует дополнительного программирования. Начнем с того, что Node.js может порождать дочерние процессы и поддерживать каналы в системных отношениях предок-потомок, подобно тому, как работает системный вызов popen(3), используя child_process.spawn() и связанные методы.

Модуль кластера даже более интересен, чем дочерний модуль процесса для создания масштабируемых серверов. Метод cluster.fork() порождает рабочие процессы, которые совместно используют порты родительского сервера, используя child_process.spawn() под покрытиями. Мастер кластера распределяет входящие соединения между своими работниками, используя по умолчанию алгоритм циклического перебора, который чувствителен к нагрузкам рабочих процессов.

Важно: Node.js не предоставляет схему маршрутизации. Если вы хотите поддерживать состояние между соединениями в кластере, вам нужно будет хранить объекты сеанса и входа в систему не в рабочей памяти.

Пакетная экосистема Node.js

В реестре NPM размещено почти полмиллиона пакетов бесплатного многократно используемого кода Node.js, что делает его крупнейшим реестром программного обеспечения в мире. Обратите внимание, что большинство пакетов NPM (в основном папки или элементы реестра NPM, содержащие программу, описанную файлом package.json) содержат несколько модулей (программ, которые вы загружаете с помощью операторов require). Эти два термина легко спутать, но в этом контексте они имеют конкретное значение и не должны взаимозаменяться.

NPM может управлять пакетами, которые являются локальными зависимостями конкретного проекта, а также глобально установленными инструментами JavaScript. При использовании в качестве менеджера зависимостей для локального проекта NPM может установить с помощью одной команды все зависимости проекта через файл package.json. При использовании в глобальных установках NPM часто требует системных (sudo) привилегий.

Вам не нужно использовать командную строку NPM для доступа к общедоступному реестру NPM. Другие менеджеры пакетов, такие как Facebook Yarn, предлагают альтернативные возможности на стороне клиента. Вы также можете искать и просматривать пакеты, используя веб-сайт NPM.

Зачем вам использовать пакет NPM?

Во многих случаях установка пакета через командную строку NPM является наиболее быстрой и удобной для получения последней стабильной версии модуля, работающего в вашей среде, и обычно требует меньше усилий, чем клонирование исходного репозитория и сборка установки из репозитория. Если вам не нужна последняя версия, вы можете указать номер версии для NPM, что особенно полезно, когда один пакет зависит от другого и может порвать с более новой версией зависимости.

Например, Express, простой и универсальный фреймворк Node.js, обеспечивает большой набор функций для создания одно- и многостраничных, а также гибридных веб-приложений. Хотя легко-клонируемое хранилище Expresscode находится по адресу https://github.com/expressjs/express, а документация Express по адресу https://expressjs.com/, быстрый способ начать использовать Express – это установить его в уже инициализированный локальный рабочий каталог разработки с помощью команды npm, например:

$ npm install express —save

Опция —save, которая по умолчанию включена в NPM 5.0 и более поздних версиях, указывает менеджеру пакетов добавить модуль Express в список зависимостей в файле package.json после установки.

Другой быстрый способ начать использовать Express – это установить исполняемый генератор express(1) глобально, а затем использовать его для локального создания приложения в новой рабочей папке:

$ npm install -g express-generator@4
$ express /tmp/foo && cd /tmp/foo

После этого вы можете использовать NPM для установки всех необходимых зависимостей и запуска сервера на основе содержимого файла package.json, созданного генератором:

$ npm install
$ npm start

Лучшие фреймворки для Node.js

  • Express.js (35,310 звезд на GitHub). Классика Node.js. Появился в 2010 году и послужил основой для длинного списка популярных фреймворков Node.js. Он считается минималистичным и простым. Express не категоричен и предлагает разработчикам большую свободу, так как они могут использовать различные модули для создания приложений. Благодаря своей гибкой природе он лучше всего подходит для крупномасштабных приложений, которые планируется настроить и расширить, и которые нуждаются в долгосрочной поддержке;
  • Sails.js (18 088 Звезд на GitHub). Этот фреймворк использовал Express в качестве своей базы, но представляет собой законченный продукт, который можно использоваться в чистом виде. Подходит для быстрых запусков. Sails совместим с любым интерфейсом, он особенно хорош для разработки и настройки приложений реального времени, требующих быстрых ответов;
  • Meteor (38 755 звезд на GitHub). Это популярный пакет Node.js, позволяющий создавать масштабируемые веб-приложения в реальном времени. Он обрабатывает приложения для любого устройства (web, iOS, Android). С Meteor разработчики могут справляться с большими объемами работ с написанием меньшего количества кода. Он подходит как идеальный инструмент для запуска проекта на всех основных платформах;
  • Loopback (8000 звезд на GitHub). Это расширяемый модульный фреймворк. Loopback специально предназначен для быстрого и простого создания API. Это позволяет запускать приложения локально или в облаке. Loopback хорошо работает для написания аутентификации и авторизации пользователя;
  • Hapi (8,701 Звезд на GitHub). Данное программное обеспечение появилось в 2011 году и также было построено на базе Express. С тех пор оно превратилось в отдельный фреймворк с уникальным подходом, целью которого является предоставление как можно большего количества вариантов использования из коробки. Он предназначен для больших команд и больших проектов, а потому будет слишком сложным для разработки простого приложения.
Наверх
Меню