#node.js #sqlite #rest
#node.js #sqlite #отдых
Вопрос:
У меня есть RESTAPI express.js
и node.js
для вставки данных в базу данных SQLite3.
Первая вставка — это оператор add, а затем извлечение lastID
, чтобы вставить его в другую таблицу.
router.post('/addStatement', function(req, res){
const data = req.body;
let corporate_statement_link_id = null;
let statement_link_exist_query = `SELECT * FROM search_results WHERE company_id = ? and link = ?;`;
let query = `INSERT INTO search_results (company_id, title, link, domain) VALUES(?,?,?,?)`
let corp_query = `INSERT INTO corporate_statements (corporate_statement_link_id, corporate_statement) VALUES(?,?)`;
db.all(statement_link_exist_query, [data.company_id, data.link], (err, row) => {
if (err){
console.log('error: ', err)
res.sendStatus(err.status).send(err);
}
if(row.length > 0){
res.sendStatus(409).send("Link already exists");
}
let insertStmt = db.prepare(query, [data.company_id, data.title, data.link, data.domain]);
insertStmt.run(err => {
if (err){
console.log('error: ', err);
res.sendStatus(err.status).send(err);
}
console.log("Last ID: ", insertStmt.lastID);
let insertIDToScrapeData = db.prepare(corp_query, [insertStmt.lastID, 1]);
insertIDToScrapeData.run(err => {
if(err){
console.log('error: ', err);
res.sendStatus(err.status).send(err);
}
});
corporate_statement_link_id = insertIDToScrapeData.lastID;
});
console.log("Scrape ID: ", corporate_statement_link_id);
res.send(JSON.stringify(corporate_statement_link_id));
});
});
Но я продолжаю получать следующую ошибку:
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
Как я могу это исправить?
Комментарии:
1. это ошибка ExpressJS, сообщающая вам, что вы уже отправили данные обратно (вероятно, с
res.sendStatus()
помощью), и вы делаете это снова, вероятно, сres.send()
помощью … попробуйте отправить что-то обратно только один раз2. @balexandre, это та часть, которую я не понимаю. Потому что это не приводит к ошибке
res.sendStatus()
. Я прочитал в сообщении SO, на которое сейчас не могу найти ссылку, но в нем что-то говорилось о двойной вставке данных, и именно это вызывает ошибку. Но мне нужно вставить данные в одну таблицу и получить идентификатор из вставленной таблицы для вставки в другую таблицу.3. но ошибка, о которой вы сообщаете, не имеет ничего общего с базой данных, я уверен, что вы не опубликовали весь код… запустите в режиме отладки, нажмите на эту конечную точку и просмотрите строку за строкой, чтобы увидеть, что происходит. первое, что вы должны сделать, это изменить
return res.status(...)
, чтобы он больше ничего не обрабатывал. Вызовres.status
orres.send
не останавливает обработку остальных, вам необходимоreturn
4. @balexandre, понял! Спасибо, что разъяснили это для меня. Имеет смысл перечитать ваш комментарий сейчас. Я попробую это сделать.
5. видите, это не было связано с базой данных, просто поймите ошибку, и все в порядке. счастливого программирования! 😊