저는 Node JS의 초보자이고 NodeJS (v. 8.7.0), sqlite3 및 Express를 사용하고 있습니다.중첩 콜백간에 데이터를 전달하는 방법은 무엇입니까?
- 릴리스 (ID, 제목, 이미지)
- 링크 (ID, URL)
각 "해제"하나 이상을 가지고
나는 SQLite는 데이터베이스에 두 개의 테이블이 그것과 관련된 "링크".
dbh.all("SELECT * FROM releases ORDER BY id DESC", (err, rows) => { ... })
그리고 사용하여 주어진 자료에 대한 모든 링크를 얻을 수 있습니다 :
내가 사용하는 모든 자료를 얻을 수
dbh.all("SELECT * FROM links WHERE id = ?", (err, rows) => { ... })
을하지만 나는를 추가하는 방법을 알아낼 수 없습니다 "링크"속성을 각각의 "릴리즈"에 연결합니다.이 링크에는 해당 링크가 있으므로 결과 객체를 콧수염에 넘길 수 있고 HTML 페이지를 생성 할 수 있습니다.
관계형 데이터베이스 내부에 계층 적 데이터를 저장하는 것이 최선의 방법은 아니므로 PHP를 사용하여 쉽게이 작업을 수행 할 수 있지만 NodeJS를 사용하는 방법을 배우고 싶습니다.
이것은 내가 지금까지 왔어요 것입니다 :
var sqlite3 = require("sqlite3")
function main() {
db = new sqlite3.Database("releases.sqlite3")
all = []
db.each(
"SELECT * FROM releases ORDER BY id DESC",
(err, release) => {
release.links = []
db.all("SELECT url FROM links WHERE id = ?", [release.id], (err, links) => {
links = links.map((e) => { return e.url })
release.links = links
// line above: tried
// links.forEach((e) => { release.links.push(e.url) })
// too, but that didn't work either.
})
all.push(release)
},
(complete) => { console.log(all) }
)
}
main()
비록, 내가 그것을 실행할 때, 그것은 필연적으로 보여줍니다
links: []
때마다. 이 문제를 어떻게 해결할 수 있습니까?
미리 감사드립니다.
편집 1 :
이 SQL 조각 데이터베이스를 생성하고, 일부 데이터로 채 웁니다.
CREATE TABLE `links` (`id` TEXT, `url` TEXT);
CREATE TABLE `releases` (`id` TEXT, `title` TEXT, `image` TEXT);
INSERT INTO links VALUES
('rel-001', 'https://example.com/mirror1'),
('rel-001', 'https://example.com/mirror2');
INSERT INTO releases VALUES
('rel-001', 'Release 001', 'https://example.com/image.jpg');
목표는이 같은 것입니다 : 두 쿼리가 콜백에서 console.log
을 추가하여 실행되는 경우
{
releases:[
{
id:'rel-001',
title:'Release 001',
image:'https://example.com/image.jpg',
links:[
'https://example.com/mirror1',
'https://example.com/mirror2'
]
}
]
}
링크의 id 필드와 동일한 릴리스의 id 필드가 그대로
all
를 초기화해야합니다? 하나의 열을 참조하는 별도의 열이 없습니까? 릴리스에 하나 이상의 링크가 있다고 가정 해보십시오.id 필드가 같으면 어떻게 될지 모르겠다. – dzm