HTTP GET-запрос в Node.js Express - PullRequest
178 голосов
/ 06 марта 2012

Как я могу сделать HTTP-запрос из Node.js или Express.js?Мне нужно подключиться к другому сервису.Я надеюсь, что вызов является асинхронным и что обратный вызов содержит ответ удаленного сервера.

Ответы [ 11 ]

0 голосов
/ 06 апреля 2017

Использовать Требуется : не предназначен для сценариев, таких как request или многих других библиотек.Reqclient позволяет в конструкторе указывать множество конфигураций, полезных, когда вам нужно снова и снова использовать одну и ту же конфигурацию: базовый URL, заголовки, параметры аутентификации, параметры ведения журнала, кэширование и т. Д. Также имеет полезные функции, такие как запрос и анализ URL, автоматическое кодирование иРазбор JSON и т. Д.

Лучший способ использования библиотеки - создать модуль для экспорта объекта, указывающего на API, и необходимых конфигураций для подключения:

Модуль client.js:

let RequestClient = require("reqclient").RequestClient

let client = new RequestClient({
  baseUrl: "https://myapp.com/api/v1",
  cache: true,
  auth: {user: "admin", pass: "secret"}
})

module.exports = client

А в контроллерах, где вам нужно использовать API, используйте вот так:

let client = require('client')
//let router = ...

router.get('/dashboard', (req, res) => {
  // Simple GET with Promise handling to https://myapp.com/api/v1/reports/clients
  client.get("reports/clients")
    .then(response => {
       console.log("Report for client", response.userId)  // REST responses are parsed as JSON objects
       res.render('clients/dashboard', {title: 'Customer Report', report: response})
    })
    .catch(err => {
      console.error("Ups!", err)
      res.status(400).render('error', {error: err})
    })
})

router.get('/orders', (req, res, next) => {
  // GET with query (https://myapp.com/api/v1/orders?state=open&limit=10)
  client.get({"uri": "orders", "query": {"state": "open", "limit": 10}})
    .then(orders => {
      res.render('clients/orders', {title: 'Customer Orders', orders: orders})
    })
    .catch(err => someErrorHandler(req, res, next))
})

router.delete('/orders', (req, res, next) => {
  // DELETE with params (https://myapp.com/api/v1/orders/1234/A987)
  client.delete({
    "uri": "orders/{client}/{id}",
    "params": {"client": "A987", "id": 1234}
  })
  .then(resp => res.status(204))
  .catch(err => someErrorHandler(req, res, next))
})

reqclient поддерживает множество функций, но есть некоторые, которые не поддерживаются другими библиотеками: Интеграция OAuth2 и интеграция с регистратором с синтаксисом cURL и всегда возвращают собственные объекты Promise.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...