저는 노드 세계에 익숙하지 않고 php 애플리케이션을 노드로 마이그레이션하려고합니다. 모든 기사 데이터를 반환하려면 첫 번째 쿼리의 결과에 따라 여러 가지 다른 쿼리를 수행해야합니다. 현재 내 데이터 개체는 두 쿼리가 실행되기 전에 반환되므로 비어 있습니다. 약속 기반 접근 방식을 사용하여 어떻게 이러한 쿼리를 "연결"할 수 있습니까?Node + Mysql : 다른 쿼리를 기반으로 더 많은 쿼리를 실행하는 방법
도울 수 있다고 생각되는 https://github.com/lukeb-uk/node-promise-mysql 라이브러리를 발견했지만 내 코드로 구현하는 방법을 모릅니다.
exports.getArticleData = function(req, done) {
pool.getConnection(function(error, connection) {
if (error) throw error;
var data = {
article: {},
listicles: []
};
// Inital query
connection.query(
`SELECT article_id, title, is_listicle_article, FROM com_magazine_articles AS article WHERE article_id = ${req
.params.articleId}`,
function(error, results) {
data.article = results;
}
);
// This query should only be excuted if is_listicle_article = true
if (data.article.is_listicle_article) {
connection.query(
`SELECT * FROM com_magazine_article_listicles WHERE article_id = ${req.params
.articleId}`,
function(error, results) {
data.listicle = results;
}
);
}
// More queries depending on the result of the first one
// ....
// ....
// Callback with the data object
done(data);
connection.release();
});
};
다른 쿼리 결과를 기반으로 쿼리를 실행하는 최선의 방법은 무엇입니까? 어떤 도움이라도 대단히 감사합니다.
안녕하세요. Derek, 신속한 답장을 보내 주셔서 감사합니다. 지금 당장 귀하의 솔루션을 구현하려고 노력할 것이고 그것이 효과가 있었다면 알려 드리겠습니다. 나는 https://github.com/mysqljs/mysql에서 구문을 복사했고 connection.query 내에 함수를 사용했다. 첫 번째 쿼리의 값이 필요하므로 이러한 쿼리를 결합 할 수있는 방법이 있는지 모르겠습니다. 나머지 쿼리는 내 코드의 쿼리와 비슷하지만 첫 번째 쿼리의 결과에 따라 해당 쿼리 중 하나만 실행됩니다. 예를 들어, article type이 listicle query 2 일 때 기사가 후원 이야기 쿼리 3 인 경우 실행됩니다. – Menelik
@Menelik 1) 나중에 쿼리가 첫 번째 쿼리의 데이터에 의존하면 변수를 저장하는 것은 끔찍한 생각이 아닙니다. 2) 조건부 쿼리를이 방식으로도 쉽게 실행할 수 있습니다. –
코드를 가지고 놀아봤을 때 다음과 같은 오류 메시지가 나타납니다. (예 : Promise.then() => {if (cond) {return connection.query()} else {return connection.query()}} : TypeError : connection.query (...). 그러면 함수가 아닙니다 .'이 작업을 수행하려면 특정 약속 라이브러리를 가져와야합니까? – Menelik