안녕하세요. MySQL 데이터베이스의 데이터를 사용하여 PDF 파일을 작성하려고하지만 스크립트를 실행하면 PDF 파일 작성을 끝내고 그 후에 삽입을 시도합니다. 그것에 대한 데이터 ..... 나는 그것이 노드의 MySQL이 비동기이기 때문에 그것이라고 생각한다. 이것에 대한 해결책이 있습니까? 여기 은 내 코드입니다 ...pdf를 만들 때 노드의 동기식 mysql 쿼리
1
A
답변
0
이는 Node.js의 비동기 특성 때문입니다. 몇 가지 영역에서 코드를 신속하게 변경하여 문제를 해결할 수 있습니다. conn.release()
및 pdf.end()
과 같은 전화가 인 경우 콜백 번호 외부에 있습니다.
아래 코드에서 conn.release()
과 pdf.end()
을 mysql 연결 콜백의 마지막 줄로 이동했습니다.
var project_ID = 1;
var PDFDocument = require('pdfkit');
$('#pdf').click(function(e) {
e.preventDefault();
var pdf = new PDFDocument;
pdf.pipe(fs.createWriteStream(__dirname + '/../MyFile.pdf'));
var option;
switch ($("input[name=report-type]:checked").val()) {
case 'all-issues':
option = {project_id: project_ID};
break;
case 'all-issues-customer':
option = {project_id: project_ID, customer: customer};
break;
}
connection.getConnection(function (err, conn) { //make connection to DB
if (err) { //error handling
showNotification('error connecting: ' + err.stack, 'danger', 'glyphicon glyphicon-tasks');
return;
}
conn.query('SELECT issues.id, issues.dbid , issues.date, issues.charm , issues.defect ,issues.key , issues.status, issues.summary, issues.description , actions.date as action_date, actions.description as action_desc FROM issues' +
' INNER JOIN actions on issues.id = actions.issue_id WHERE ? ', [option], function (error, data) {
if (error) {
showNotification('Error :' + error, 'danger', 'glyphicon glyphicon-tasks');
} else {
var lastID = -1;
data.forEach(function (data) {
if (lastID !== data.id) {
lastID = data.id;
pdf.addPage();
pdf.text('Number :' + data.dbid).moveDown();
pdf.text('Customers : ');
pdf.text('Baseline : ');
pdf.text('Error/Wish : ' + data.key).moveDown();
pdf.text('Charm : ' + data.charm + '/Defect : ' + data.defect + ' Status : ' + data.status);
pdf.text('Summary : ' + data.summary);
pdf.text('Description : ' + data.description).moveDown();
pdf.text('Actions/ History :').moveDown();
}
pdf.text(' - date : ' + convertDate(data.date));
pdf.text(' description : ' + data.description).moveDown();
})
}
conn.release();
pdf.end();
});
});
});
콜백 논리가 완료 될 때까지 이러한 호출이 이루어지지 않아야합니다. 참고 콜백 내에서 콜백 (또는 그 이상)이있는 경우 해당 콜백 내부에서 해당 함수가 호출되도록해야합니다. Callback Hell의 중간에 자주 나옵니다.
행운을 빕니다!
관련 문제
- 1. 동기식 게이트웨이를 만들 수 있습니까?
- 2. PDO를 사용하여 mysql 쿼리 함수를 만들 때 행을 삽입하지 마십시오.
- 3. fpdf를 사용하여 pdf를 만들 때 db 쿼리에서 문자를 제거/변환
- 4. 중첩 집합에서 노드의 전체 경로를 가져 오는 MySQL 쿼리
- 5. 동기식/
- 6. MySQL 쿼리 (또는 하위 쿼리)를 올바르게 만들 수 없습니다.
- 7. 가장자리 목록에서 그래프를 만들 때 초기 노드의 ID
- 8. PHPExcel을 사용하여 pdf를 만들 때 병합 셀이 작동하지 않습니다.
- 9. ListView에서 itextg로 pdf를 만들 때 동일한 listview 하위 만 나타납니다.
- 10. HTML (webview)에서 PDF를 만들 때 흰색 줄이 나타남
- 11. iTextSharp로 PDF를 만들 때 새 페이지에 여분의 공간이 삽입되었습니다.
- 12. JFreeChart & iText : PDF를 만들 때 검은 색 이미지
- 13. 델파이로 pdf를 만들 때 어떻게 줄 바꿈을 할 수 있습니까?
- 14. xhtml2pdf로 PDF를 만들 때 CSS 구문 분석 오류가 발생합니다. pisa.CreatePDF()
- 15. itextsharp를 사용하여 pdf를 만들 때 pdf에서 바코드 생성
- 16. 쿼리 각 노드의 내부 내용
- 17. Solaris - 동기식 디스크 플러시/동기식 동기화?
- 18. dompdf를 사용하여 이미지로 pdf를 만들 수 없습니다.
- 19. "or"가 사용될 때 MySQL 쿼리 최적화
- 20. MySQL 쿼리 더 이상한 쿼리 결과로 쿼리 할 때
- 21. XAMPP에서 mysql 테이블을 만들 때 오류가 발생했습니다.
- 22. MySQL INSERT 쿼리를 만들 때 NULL이 필요합니까?
- 23. MySQL 데이터베이스에서 테이블을 만들 때 오류가 발생했습니다.
- 24. mySQL : 외래 키를 만들 때 오류가 발생했습니다.
- 25. PDO로 MySQL 테이블을 만들 때 오류가 발생했습니다
- 26. mysql 쿼리?
- 27. mysql 쿼리 쿼리
- 28. MYSQL 쿼리
- 29. TreeView에서 노드의 배경색을 어떻게 만들 수 있습니까?
- 30. domPDF로 실제 PDF를 만들 수 없습니다.
감사 인사 ..... 나는 pdf.end()를 안쪽으로 옮겨서 작동했습니다. –
당신은 환영합니다 :) – Ding