Доброго времени суток.
Стоит такая задача - написать скрипт для 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()
}
)
})
}