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', (err, response, body) => {
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> на торжество!',
}, (err, response) => {
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/', (err, response, body) => {
if(!err && response.statusCode === 200) {
const $ = cheerio.load(body);
const rate = $('.currency-table__large-text').eq(1).text();
console.log('Курс доллара: %s рублей', rate);
}
});
Проблема в том. что так получить можно только данные, которые хранятся в html. Для страниц, которые генерируются при помощи js, например, сайты на реакте, такой парсинг неприменим.