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
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'
Комментарии
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.
JavaScript | |
NodeJS | |
NPM | |
Gulp | |
Playwright |