Все началось с того, что передо мной стояла задача написать бота для Telegram, здесь я впервые с ними столкнулся.
API .
Для работы с ним я выбрал популярный на данный момент модуль Запрос .
Бот был написан.
Я заметил, что потребление памяти у него росло с каждым запросом к API. Выявив проблему с тяжеловесным Request, я решил попробовать написать свой модуль для HTTP-запросов, максимально простой, лёгкий и быстрый.
В результате вышел самый компактный модуль (сейчас основной файл модуля содержит менее 200 строк) и не лишенный функционала, который я назвал tiny_request.
Простота использования
Для обычного GET-запроса достаточно написать всего несколько строк:var req = require('tiny_request') req.get(' http://google.com ', function(body, response, err){ if (!err && response.statusCode == 200) { console.log(body) } })
JSON
Поскольку модуль в первую очередь будет использоваться для работы с API, я решил, что нужен простой механизм работы с json. Чтобы автоматически десериализовать полученный ответ от сервера, достаточно передать параметр json: true var req = require('tiny_request')
req.get({ url: ' http://test.com/json ', json: true}, function(body, response, err){
if (!err && response.statusCode == 200) {
console.log(body) //body now is parsed JSON object
}
})
GET-запросы
Для запроса с GET-параметрами достаточно передать запрос, равный объекту с GET-параметрами; также, чтобы изменить порт запроса, достаточно передать параметр порта: req.get({ url: ' http://test.com ', query: { test: 'test' }, port: 8080}, function(body, response, err){
if (!err && response.statusCode == 200) {
console.log(body)
}
})
POST-сообщение
Где бы мы были без POST-запросов и передачи файлов? var data = {
image: {
value: fs.createReadStream('photo.png'),
filename: 'photo.png',
contentType: 'image/png'
},
test: 'test'
}
req.post({
url: ' http://test.com ',
multipart: data
}, function(body, response, err){
if (!err && response.statusCode == 200) {
console.log(body)
}
})
ПОСТ-формы
Работать с формами тоже очень просто: var form = {
test: 'test'
}
req.post({ url: ' http://test.com ', form: form}, function(body, response, err){
if (!err && response.statusCode == 200) {
console.log(body)
}
})
HTTP-заголовки
Чтобы добавить заголовки, просто передайте параметр headers: var headers = {
'Test-Header': 'test'
}
req.post({ url: ' http://test.com ', headers: headers}, function(body, response, err){
if (!err && response.statusCode == 200) {
console.log(body)
}
})
Трубный поток
Работать с потоками тоже просто: req.get({url: url, pipe: stream})
Все исходники можно найти на GitHub: github.com/Naltox/tiny_request Теги: #node.js #Request #node.js #JavaScript #node.js
Вместе с данным постом часто просматривают:
-
Открытый Вебинар «Css-Препроцессоры»
19 Oct, 24 -
Freertos + Stm32F4 На C++ Под Linux
19 Oct, 24 -
Сравнение Цен В Интернет-Магазине
19 Oct, 24 -
Codenotes — Победитель Clojure Cup 2013
19 Oct, 24