Node JS
NodeJS
- NodeJS запускает javascript на сервере.
- NodeJS создан на движке V8
- Быстро и эффективно использует память
- NodeJS использует библиотеки по работе с сетью с файлами
Why NodeJS
- JavaScript
- Общий код клиент сервер
- Решает основные задачи WEB разработки
- Хорошо работает с большим количеством соединений
- К NodeJS очень удобный менеджер пакетов npm
Set Up
- Download and install https://nodejs.org/uk/
- Documentation https://nodejs.org/uk/docs/
- Stability https://nodejs.org/dist/latest-v16.x/docs/api/
Modules
function User(name) {
this.name = name
}
User.prototype.hello = function(who) {
console.log(`Hello ${who.name}`);
}
let user1 = new User('Vic');
let user2 = new User('Vic2');
user1.hello(user2);
run code in terminal or cmd:
Modules
class User {
constructor(name) {
this.name = name;
}
hello(who) {
console.log(`Hello ${who.name}`);
}
}
let user1 = new User('Vic');
let user2 = new User('Vic2');
user1.hello(user2);
run code in terminal or cmd:
Modules
Подключение js файлов в другие js файлы
require
Вынесем User в другой файл
// user.js
class User {
constructor(name) {
this.name = name;
}
hello(who) {
console.log(`Hello ${who.name}`);
}
}
let user1 = new User('Vic');
let user2 = new User('Vic2');
user1.hello(user2);
console.log('require!');
// server.js
require('./user');
Modules
Для того что бы User стал доступным в server.js необходимо реализовать модуль в user.js
require
// user.js
class User {
constructor(name) {
this.name = name;
}
hello(who) {
console.log(`Hello ${who.name}`);
}
}
exports.User = User;
// server.js
const user = require('./user');
let user1 = new user.User('Vic');
let user2 = new user.User('Vic2');
user1.hello(user2);
Modules
global objects
// user.js
class User {
constructor(name) {
this.name = name;
}
hello(who) {
console.log(`Hello ${who.name}`);
}
}
global.User = User;
// server.js
require('./user');
let user1 = new User('Vic');
let user2 = new User('Vic2');
user1.hello(user2);
Все что будет записано в global будет доступно глобально, аналогия с обьектом window.
Modules
// user.js
const phrases = require('./ru.json');
class User {
constructor(name) {
this.name = name;
}
hello(who) {
console.log(`${phrases.Hello} ${who.name}`);
}
}
global.User = User;
// ru.json
{
"Hello": "Привет"
}
Еще есть тип модуля JSON.
Добавим ru.json файл.
// server.js
require('./user');
let user1 = new User('Vic');
let user2 = new User('Vic2');
user1.hello(user2);
Modules
// user/index.js
const phrases = require('./ru.json');
class User {
constructor(name) {
this.name = name;
}
hello(who) {
console.log(
`${phrases.Hello} ${who.name}`
);
}
}
exports.User = User;
// server.js
const user = require('./user');
let user1 = new user.User('Vic');
let user2 = new user.User('Vic2');
user1.hello(user2);
Работа с модулями директориями.
Создадим директорию user, переместим в нее файлы user.js и ru.json. user.js переименуем в index.js
Modules
// user/index.js
const phrases = require('./ru.json');
class User {
constructor(name) {
this.name = name;
}
hello(who) {
console.log(`${phrases.Hello} ${who.name}`);
}
}
exports.User = User;
console.log(module);
// server.js
require('./user');
let user1 = new User('Vic');
let user2 = new User('Vic2');
user1.hello(user2);
Object Module.
Добавим в консоль module. В консоле будет большой обьект module.
Modules
// user/index.js
const phrases = require('./ru.json');
class User {
constructor(name) {
this.name = name;
}
hello(who) {
console.log(
`${phrases.Hello} ${who.name}`
);
}
}
exports.User = User;
console.log(module);
// server.js
require('./user');
let user1 = new User('Vic');
let user2 = new User('Vic2');
user1.hello(user2);
Object Module.
Добавим в консоль module. В консоле будет большой обьект module. Содержит информацию о модуле.
Из результата нам на данный момент будут важны два свойства parent и id.
Modules
// server.js
const user = require('./user');
function run() {
let user1 = new user.User('Vic');
let user2 = new user.User('Vic2');
user1.hello(user2);
}
if (module.parent) {
exports.run = run;
} else {
run();
}
module.parent
Наш код который находится в server.js работает потому что его запускаем явно иначе его нужно exports делать. Как пример можем добавить проверку.
// user/index.js
const phrases = require('./ru.json');
class User {
constructor(name) {
this.name = name;
}
hello(who) {
console.log(`${phrases.Hello} ${who.name}`);
}
}
exports.User = User;
console.log(module);
Modules
// user/index.js
const phrases = require('./ru.json');
class User {
constructor(name) {
this.name = name;
}
hello(who) {
console.log(`${phrases.Hello} ${who.name}`);
}
}
module.exports = User;
module.exports
Для exports можем использовать module.exports или exports.
// server.js
const User = require('./user');
function run() {
let user1 = new User('Vic');
let user2 = new User('Vic2');
user1.hello(user2);
}
if (module.parent) {
console.log(module);
exports.run = run;
} else {
run();
}
В нашем случае как пример мы хотим возвращать функцию User а не обьект у которого данная функция является методом. В этом случае нужно использовать module.exports = User
Modules
// user/index.js
const db = require('../db');
db.connect(); // load data
class User {
constructor(name) {
this.name = name;
}
hello(who) {
console.log(`${db.getPhrase('Hello')} ${who.name}`);
}
}
module.exports = User;
Добавим упрощенную версию DB.
// db/index.js
let phrases;
exports.connect = function() {
phrases = require('./ru.json');
}
exports.getPhrase = function(name) {
return phrases[name];
}
Создадим папку db и в ней модуль. Также перенесем ru.json в эту папку.
Modules
Task
Добавьте проверку если данной фразы нет вывести ошибку.
Modules
Добавим еще обращение в базу данных.
// server.js
const User = require('./user');
const db = require('./db');
function run() {
let user1 = new User('Vic');
let user2 = new User('Vic2');
user1.hello(user2);
console.log(`${db.getPhrase('Run successful')}`);
}
if (module.parent) {
console.log(module);
exports.run = run;
} else {
run();
}
Повторно вызывать connect не нужно. При первом подключении модуля он инициализируется и при повторном подключении файл уже проинициализирован, просто другой путь.
Modules
Перенесем db.connect в server.js
// server.js
const User = require('./user');
const db = require('./db');
db.connect(); // load data
function run() {
let user1 = new User('Vic');
let user2 = new User('Vic2');
user1.hello(user2);
console.log(`${db.getPhrase('Run successful')}`);
}
if (module.parent) {
console.log(module);
exports.run = run;
} else {
run();
}
Modules
Работа с путями ../ не удобно.
// server.js
const User = require('./user');
const db = require('db');
db.connect(); // load data
function run() {
let user1 = new User('Vic');
let user2 = new User('Vic2');
user1.hello(user2);
console.log(`${db.getPhrase('Run successful')}`);
}
if (module.parent) {
console.log(module);
exports.run = run;
} else {
run();
}
Порядок поиска модулей https://nodejs.org/api/modules.html#modules_all_together.
windows: set NODE_PATH=. mac os: NODE_PATH=.
Modules
Module factory.
// server.js
const User = require('./user');
const db = require('db');
db.connect(); // load data
const log = require('logger')(module);
function run() {
let user1 = new User('Vic');
let user2 = new User('Vic2');
user1.hello(user2);
log(`${db.getPhrase('Run successful')}`);
}
if (module.parent) {
exports.run = run;
} else {
run();
}
Заключается в том что при подключении модуля сразу передаем ему параметры.
// logger.js
module.exports = function(module) {
return function() {
const args = [module.filename]
.concat([].slice.call(arguments));
// console.log.apply(console, arguments);
console.log.apply(console, args);
}
}
npm
- Для создания такого модуля нужно вызвать комманду npm init
- Для регистрации в центральной базе данных npm publish, но перед этим нужно создать user - npm adduser
- Для установки модуля используем npm install <имя модуля>. Скаченный модуль установится в директорию node_modules.
- Затем можем сделать require установленного модуля.
- Либо мы можем вручную указать какие нам нужны модули в файле packa.json и затем выполнить комманду npm install.
npm
Давайте рассмотрим npm https://www.npmjs.com/package/lodash
NodeJS
By Oleg Rovenskyi
NodeJS
- 211