Сохранить записи базы данных из массива в nodejs - PullRequest
1 голос
/ 14 февраля 2020

Я собираю данные с сайта и сохраняю их в массив. Я хотел бы сохранить этот массив, бросив mysql базу данных.

Я использую nodejs в качестве базового фреймворка, mysql базу данных и typeorm в качестве каркаса базы данных.

Это код с моего express веб-сервера, куда я хочу передать элементы через for-l oop, скинул базу данных:

app.get('/dev', async (req, res) => {
console.log(req.body)
const channelData = await scrape.scrapeChannel()
console.log(channelData.namearray.length);

for (i = 0; i < channelData.namearray.length; i++) {
 const creators = await database.insertCreator(channelData.namearray[i], channelData.datearray[i], channelData.imgarray[i])
    res.send(creators)
}});

Это мой код для подключения к базе данных:

async function insertCreator(training, date, img) {

const connection = await getConnection();

// create
const creator = new Creator();
creator.img = img;
creator.training = training;
creator.date = date;

// save
const creatorRepo = connection.getRepository(Creator);
const res = await creatorRepo.save(creator);
console.log('saved', res);

// return new list
const allCreators = await creatorRepo.find();
connection.close();
return allCreators;}

Если я запускаю код, я получаю следующее сообщение об ошибке:

AlreadyHasActiveConnectionError: Невозможно создать новое соединение с именем «default», так как соединение с таким именем уже существует и теперь оно имеет активное сеанс соединения.

Кажется, я не закрываю соединение с базой данных. Но я не понимаю, где и почему.

Надеюсь, вы мне поможете.

1 Ответ

0 голосов
/ 14 февраля 2020

Вы открываете и закрываете соединение для каждой вставки. Вы получаете эту ошибку, потому что новая попытка соединения сделана до того, как старое соединение будет закрыто.

Попробуйте один раз открыть соединение, передать функцию соединения, чтобы вставить, выполнить все вставки и, наконец, закрыть соединение.

//Pseudo code here
connection = getConnection()
for loop {
  insertCreator(connection, params) 
}
connection.close()

Если это часть производственного кода, я бы рекомендовал использовать connectionPool для каждого запроса, чтобы все запросы были обработаны правильно.

...