Node Hero


https://github.com/irinainina/node.js/tree/node-hero

Модули


Структура проекта

├── app 
 | ├── calc.js 
 | └── index.js 
├── index.js 
└── package.json
index.js

Подключаем файл app.js из папки app

require('./app/app'

app.js

const sum = require('./calc')
const numbersToAdd = [34102]
const result = sum(numbersToAdd)
console.log(`The result is: ${result}`)

calc.js

function sum (arr) {
  return arr.reduce((ab=> a + b, 0)
}
module.exports = sum

NPM


Установим библиотеку lodash

npm install lodash
Подключаем и используем

const _ = require('lodash')
const res = _.assign({ 'a'1 }, { 'b'2 }, { 'c'3 });
console.log(res) // { a: 1, b: 2, c: 3 }

Асинхронность


Синхронное чтение файла

const fs = require("fs");
const path = require("path");
let content;
try {
  content = fs.readFileSync(path.join(__dirname, "..""file.md"), "utf-8");
catch (ex) {
  console.log(ex);
}
console.log(content);

Асинхронное чтение файла

const fs = require('fs')
const path = require("path");
fs.readFile(path.join(__dirname, "..""file.md"), 'utf-8', (errcontent) => {
    if (err) {
        return console.log(err)
    }
    console.log(content)
})

особенности асинхронного выполнения кода:

  • обработка ошибок: вместо блока try-catch ошибка проверяется в функции, переданной в качестве параметра - колбеке
  • отсутствует возвращаемое значение: асинхронные функции не возвращают значения, но значения будут переданы в колбек

Сервер


Сервер на Node.js

const http = require("http");
const server = http.createServer((requestresponse=> {
  response.end("Hello NodeJS!");
});
server.listen(3000, () => {
  if (err) {
    return console.log(err);
  }
  console.log("Сервер начал прослушивание запросов на порту 3000");
});

Сервер на Еxpress

const express = require("express");
const app = express();

app.get("/", (requestresponse=> {
  response.end("Hello Express!");
});

app.listen(3000, (err=> {
  if (err) {
    return console.log(err);
  }
  console.log("Сервер начал прослушивание запросов на порту 3000");
});

Самое большое преимущество Express - встроенный роутер
Маршрутизация приложения определяется с помощью app.get, app.post, app.put и т.д.

Базы данных

Данные в самом приложении могут храниться только до его перезагрузки.
Данные можно хранить в файловой системе, но это затрудняет масштабирование приложения, а хранение большого объёма данных может замедлить его работу.
Поэтому используются базы данных. Их два типа - SQL и NoSQL

SQL - реляционные базы данных. Они представляют собой таблицы, вроде Google Sheets или Microsoft Excel. Каждое новое значение добавляется в них как строка в таблицу. У каждого столбца этой таблицы задаётся значение и тип данных: имя пользователя - строка, возраст пользователя - число, является ли пользователь админом - булево значение, список друзей пользователя - объект и т д

NoSQL - могут хранить произвольный JSON. Это удобно и просто, но нет гарантий целостности и непротиворечивости данных и нет единой структуры данных. MongoDB - самая популярная NoSQL база данных