NodeJS

Содержание
Введение
Установка
Установка в Linux
Установка последней версии nodejs в Linux
Начало работы
Создать файл
Скачать картинку из интернета
Ошибки
Похожие статьи

Введение

Node или Node.js — программная платформа, основанная на движке V8 (транслирующем JavaScript в машинный код), превращающая JavaScript из узкоспециализированного языка в язык общего назначения.

Node.js добавляет возможность JavaScript взаимодействовать с устройствами ввода-вывода через свой API , написанный на C++ , подключать другие внешние библиотеки, написанные на разных языках, обеспечивая вызовы к ним из JavaScript-кода.

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

Также есть возможность разрабатывать на Node.js и десктопные оконные приложения (при помощи NW.js, AppJS или Electron для Linux , Windows и macOS) и даже программировать микроконтроллеры (например, tessel, low.js и espruino).

В основе Node.js лежит событийно-ориентированное и асинхронное (или реактивное) программирование с неблокирующим вводом/выводом.

Установка

Скачайте Nodejs с официального сайта nodejs.org

Выбираем версию LTS (Recommended for most users)

Должен загрузиться файл .msi, например node-v10.16.3-x64.msi

Устанавливаем и затем проверяем версию командой

$ node -v

v10.16.3

Установка в Linux

В Ubuntu Debian и т.д.

sudo apt install nodejs

В CentOS , Rocky , Red Hat, Fedora и т.д.

sudo yum install nodejs

Устанавливаем и затем проверяем версию командой

$ node -v

v10.21.0

Установка последней версии nodejs

В репозитории по умолчанию может быть довольно старая версия nodejs. Это зависит от дистрибутива Linux.

В Fedora, скорее всего будет новая версия.

А в стабильной Ubuntu старая и, например, для работы rfbrowser она не подходит.

Установить нужную версию можно следующим способом

sudo apt -y install curl gcc g++ make
curl -sL https://deb.nodesource.com/setup_16.x -o nodesource_setup.sh
sudo bash nodesource_setup.sh
sudo apt -y install nodejs
node -v

v16.14.0

Если вам нужна не 16-я версия - просто заменить setup_16.x на нужную

Во время установки будет примерно такой лог

## Installing the NodeSource Node.js 16.x repo... ## Populating apt-get cache... + apt-get update Hit:1 http://fi.archive.ubuntu.com/ubuntu jammy InRelease Get:2 http://fi.archive.ubuntu.com/ubuntu jammy-updates InRelease [109 kB] Get:3 http://fi.archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB] Get:4 http://fi.archive.ubuntu.com/ubuntu jammy-security InRelease [110 kB] Get:5 http://fi.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [221 kB] Get:6 http://fi.archive.ubuntu.com/ubuntu jammy-updates/universe amd64 Packages [102 kB] Fetched 644 kB in 0s (1,614 kB/s) Reading package lists... Done ## Confirming "jammy" is supported... + curl -sLf -o /dev/null 'https://deb.nodesource.com/node_16.x/dists/jammy/Release' ## Adding the NodeSource signing key to your keyring... + curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor | tee /usr/share/keyrings/nodesource.gpg >/dev/null ## Creating apt sources list file for the NodeSource Node.js 16.x repo... + echo 'deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_16.x jammy main' > /etc/apt/sources.list.d/nodesource.list + echo 'deb-src [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_16.x jammy main' >> /etc/apt/sources.list.d/nodesource.list ## Running `apt-get update` for you... + apt-get update Hit:1 http://fi.archive.ubuntu.com/ubuntu jammy InRelease Hit:2 http://fi.archive.ubuntu.com/ubuntu jammy-updates InRelease Hit:3 http://fi.archive.ubuntu.com/ubuntu jammy-backports InRelease Hit:4 http://fi.archive.ubuntu.com/ubuntu jammy-security InRelease Get:5 https://deb.nodesource.com/node_16.x jammy InRelease [4,583 B] Get:6 https://deb.nodesource.com/node_16.x jammy/main amd64 Packages [774 B] Fetched 5,357 B in 0s (13.5 kB/s) Reading package lists... Done ## Run `sudo apt-get install -y nodejs` to install Node.js 16.x and npm ## You may also need development tools to build native addons: sudo apt-get install gcc g++ make ## To install the Yarn package manager, run: curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list sudo apt-get update && sudo apt-get install yarn

Начало работы

Создадим папку для небольшой демонстарции возможностей nodejs.

Перейдём в ней и создадим там файл test.js

$ mkdir test-nodejs
$ cd test-nodejs
$ touch test.js

Откроем файл текстовый редактором. Я обычно пользуюсь Visual Studio Code vi или Sublime Text

первый мне нравится, а vi просто обычно везде установлен по умолчанию.

Создание файла

Сейчас Вы узнаете, как с помощью nodejs можно создавать файлы.

В файл test.js внесём следующие изменения

var fs = require('fs');

Эта строка означает, что переменная1 fs теперь будет вызывать модуль fs.

Про возможности модуля fs можно прочитать в документации: nodejs.org/api/fs.html .

В следующей части кода мы напишем функцию, которая создаст файл и обработает возможные ошибки2

fs.writeFile(__dirname + "/index.html", "<h1>HeiHei.ru</h1>", (err)=>{
if (err) throw err;}
console.log("The file has been saved!");}
});

Про команду fs.writeFile можно прочитать в документации: nodejs.org/api/fs.html.

Скачать картинку из интернета

Первым делом подключим модуль https

Создадим переменную с таким же именем

var https = require('https');

Допустим мы хотим скачать с сайта HeiHei.ru картинку с отдыхающими на солнце черепахами из парка Ла Палома .

Создадим переменную

var myPhotoLocation = 'https://www.heihei.ru/Spain/cities/
benalmadena/img/bmd61.jpg'

И используем метод https.get 3

https.get(myPhotoLocation, (res) =>{ res.pipe(fs.createWriteStream(__dirname +"/Turtle.jpg")); })

Не забываем, что для использования fs нужно сперва объявить переменную.

Скрипт целиком:

const fs = require('fs'); const https = require('https'); var myPhotoLocation = 'https://www.heihei.ru/Spain/cities/benalmadena/img/bmd61.jpg'; https.get(myPhotoLocation, (res) => { res.pipe(fs.createWriteStream(__dirname + "/Turtle.jpg")); })

Про метод https можно прочитать на сайте nodejs.org/api/https.html

var myPhotoLocation = 'https://www.heihei.ru/Spain/cities/
benalmadena/img/bmd61.jpg'

А вот так черепахи греются на солнце в парке Ла Палома в Бенальмадене Испания
Фото: www.HeiHei.ru

Комментарии

1

Или

const fs = require('fs');

В нашем примере это не будет играть особой роли. Остановимся на варианте с var

2

Если использовать более старый синтаксис (если не ошибаюсь в районе 7-8 версий) то код будет выглядеть следующим образом

fs.writeFile(__dirname + "/index.html", "<h1>HeiHei.ru</h1>", function(error){
if (error) {return console.log(error);}
else {return console.log(" The file has been saved! ");}
});

3

Старый синтаксис

https.get(myPhotoLocation, function(response){ response.pipe(fs.createWriteStream(__dirname +"/Turtle.jpg")); })

Ошибки

1

Ошибка при установке Nodejs

$ npm install Nodejs --save-dev

npm WARN saveError ENOENT: no such file or directory, open 'C:\Users\ao\Desktop\Sites\heihei\package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open 'C:\Users\ao\Desktop\Sites\heihei\package.json'
npm WARN heihei No description
npm WARN heihei No repository field.
npm WARN heihei No README data

npm WARN heihei No license field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

+ Nodejs@4.0.2
added 314 packages from 217 contributors and audited 6490 packages in 30.037s
found 0 vulnerabilities

events.js:174 throw er; // Unhandled 'error' event
^
CssSyntaxError: postcss-simple-vars: C:\Users\ao\Desktop\Sites\travel-site\app\assets\styles\modules\_large-hero.css:5:2: Undefined variable $aMadeUpVariable2

Может быть вызвана, например, несуществующей переменной. Допустим Вы добавили цвет как переменную, но нигде её не задали.

TypeError [ERR_INVALID_OPT_VALUE_ENCODING]

$ node test.js

internal/fs/utils.js:60 throw new ERR_INVALID_OPT_VALUE_ENCODING
(encoding); ^ TypeError [ERR_INVALID_OPT_VALUE_ENCODING]: The value "<h1>HeiHei.ru</h1>" is invalid for option "encoding" at assertEncoding (internal/fs/utils.js:60:11) at getOptions (internal/fs/utils.js:182:5) at Object.writeFile (fs.js:1164:13) at Object.<anonymous> (C:\Users\ao\Desktop\Sites\heihei\test-nodejs\test.js:3:4) at Module._compile (internal/modules/cjs/loader.js:778:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10) at Module.load (internal/modules/cjs/loader.js:653:32) at tryModuleLoad (internal/modules/cjs/loader.js:593:12) at Function.Module._load (internal/modules/cjs/loader.js:585:3) at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)

Скорее всего Вы случайно добавили больше запятых, чем нужно и node решил, что раз после второй запятой идёт не callback а что-то другое - значит Вы задаёте параметр к data. Проверьте структуру команды.

Должно быть так:

fs.writeFile(Название файла или путь к нему, данные например которые Вы хотите внести в файл, callback обычно это err.

У Вас скорее всего:

fs.writeFile(Название файла или путь к нему, данные например которые Вы хотите внести в файл, какой-то неведомый ноду код, callback обычно это err.

Про команду fs.writeFile можно прочитать в документации: nodejs.org/api/fs.html.