@Kermet123

Как выполнить запрос на одном ресурсе, а затем записать данные в другой ресурс(бд)?

Доброго времени суток.
Стоит такая задача - написать скрипт для node.js Этот скрипт будет запрашивать какие либо данные, например посты, на одном ресурсе, например на https://jsonplaceholder.typicode.com/posts
Затем он создаст таблицу в бд на другом сервисе(сервере) и поместит результат ( полученные посты ) в эту таблицу. Как получить данные с постами это понятно.
Я не могу понять как результат запихать в БД.
Предположу, что нужно несколько запросов. Первым мы создадим новую таблицу. Потом в цикле пробегаемся по массиву постов, и для каждой итерации делаем запрос в БД типа INSERT INTO .... и т.д.
Как вернуть результат из функции request()? я воспользовался дополнительной функцией, но мне кажется это костыль.
После получения постов, я хочу по ним пройтись forEach, но не выходит, вылетает ошибка, мол data.forEach is not a function
Хотя в консоль этот массив выводится без ошибок. Пробовал просто обратиться к элементу массива
posts[0] тоже не работает.

Буду благодарен за любую помощь.

'use strict'

const fs = require('fs')
const pg = require('pg')
const request = require('request')

// конфиг для postgresql
const config = {
  connectionString:
    'postgres://candidate:62I8anq3cFq5GYh2u4Lh@rc1b-r21uoagjy1t7k77h.mdb.yandexcloud.net:6432/db1',
  ssl: {
    rejectUnauthorized: true,
    ca: fs.readFileSync('/home/alex/.postgresql/root.crt').toString(),
  },
}

const con = new pg.Client(config)

con.connect((err) => {
  if (err) throw err
})

// ---------------------------

// запрос за постами
const url = 'https://jsonplaceholder.typicode.com/posts?_page=1&_limit=10'

request(
  {
    method: 'GET',
    url: url,
  },
  function (error, response, body) {
    if (!error && response.statusCode == 200) {
      func(body)
    }
  }
)

const func = (data) => {
  const posts = data
  // console.log(posts)
  data.forEach((post) => {
    con.query(
      `INSERT INTO posts (title, body) VALUES ('${post.title}', '${post.body}')`,
      (err, q) => {
        if (err) throw err
        con.end()
      }
    )
  })
}
  • Вопрос задан
  • 15 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы