Geekbrains Node JS. Урок 3. Работа с сетевыми запросами

Исходящие запросы

Для отправки запросов в node.js есть два встроенных модуля http и httrs

const http = require('http');
const https = require('https');

Пример отправки GET запроса:

const http = require('http');
http.get("http://www.google.com/", (res=> {
  console.log("Got response: " + res.statusCode);
}).on('error', (e=> {
  console.log("Got error: " + e.message);
}); 

const https = require('https');

https.get('https://geekbrains.ru', (res=> {
  console.log(res.statusCode);
}).on('error', (err=> {
  console.log(err);
});

Пример отправки POST запроса:

const http = require("http");
const options = {
  hostname: "www.google.com",
  port: 80,
  path: "/upload",
  method: "POST",
};
const req = http.request(options, (res=> {
  console.log("STATUS: " + res.statusCode);
  console.log("HEADERS: " + JSON.stringify(res.headers));
  res.setEncoding("utf8");
  res.on("data", (chunk=> {
    console.log("BODY: " + chunk);
  });
});
req.on("error", (e=> {
  console.log("problem with request: " + e.message);
});
req.write("data\n");
req.write("data\n");
req.end();

Но нативные методы почти никто не использует, они не очень удобные и функциональные
Для отправки запроса удобно использовать модуль request

npm i request

const request = require('request');
request('https://www.google.ru', (errresponsebody=> {
  if(err) {
    console.log(err)
  } else {
    console.log(body)
  }
})

Для отправки почты используются почтовые сервисы. которые гарантируют отправку почты, предоставляют статистику, но платные. Бесплатный вариант менее качественный - письма часто отправляются в спам и статистики получения нет. Выглядит примерно так

  
const nodemailer = require('nodemailer');

const smtpTransport = nodemailer.createTransport('SMTP', {
  service: 'Gmail',
  auth: {
    user: 'vasya@gmail.com',
    pass: '*******',
  }
});

smtpTransport.sendMail({
  from: 'Vasya Pupkin <vasya@gmail.com>',
  to: 'Petya Pupkin <petya@gmail.com>, Masha Pupkina <masha@gmail.com>',
  subject: 'Семейное торжество братьев Пупкиных',
  text: 'Приглашаем на торжество',
  html: '<b>Приглашаем</b> на торжество!',
}, (errresponse=> {
  if(err) {
    throw err;
  } else {
    console.log('Message has been sent');
  }

  smtpTransport.close();
});

Парсинг страниц. Получить содержание страницы в интернете не очень сложно

const request = require('request');
const cheerio = require('cheerio');

request('https://www.banki.ru/products/currency/cash/usd/sankt-peterburg/', (errresponsebody=> {
  if(!err && response.statusCode === 200) {
    const $ = cheerio.load(body);

    const rate = $('.currency-table__large-text').eq(1).text();

    console.log('Курс доллара: %s рублей', rate);
  }
});

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