2014-06-24 2 views
0

저는 잠시 동안 MySQL을 노드와 함께 사용하기 위해 애 쓰고 있습니다. 다음 코드를 실행해도 오류는 발생하지 않지만 동시에 콘솔 메시지는 인쇄되지 않습니다 (분명한 경우 제외).데이터베이스에 연결하려고 할 때 아무런 힌트가 없습니다.

var app = require('express')(); 
var http = require('http').Server(app); 
var mysql = require('mysql'); 

var connection = mysql.createConnection({ 
    host  : 'localhost', 
    user  : 'root', 
    password : '******', 
    database : 'blogDB' 
}); 

connection.connect(function(err) { 
     if(err) { 
      console.log('error when connecting to database:', err); 
     } 
     console.log('Connected to the database'); 
    }); 

var queryString = 'SELECT * FROM blogs'; 

connection.query(queryString, function(err, rows, fields) { 
    if (err) throw err; 

    for (var i in rows) { 
     console.log('Post: ', rows[i].id); 
    } 
}); 

connection.end(); 

http.listen(3306, function(){ 
     console.log('listening on *:3306'); 
}); 

출력 : 내가 갈 때이 위에 3306

, *를 수신 대기 : 브라우저에서 "로컬 호스트 3306"을, 다운로드가 즉시 시작하고 아무 웹 페이지에 표시되지 않습니다. 다운로드없이 확장자를 가진 파일이지만, 다음 포함 :

J 
5.6.19 tscvKP3M ÿ÷ € g?F!q6X:Y2*z mysql_native_password ! ÿ„#08S01Got packets out of order 

그와 관련이 있다면 나는 확실하지 않다,하지만 내가 MySQL이 실행되지 않았을 때 그것은 확실히 발생하지 않았다. 이 문제를 해결하는 방법을 모르겠습니다. 어떤 아이디어가 잘못 될 수 있습니까?

+0

나는 약간의 pseudocode를 아래 답변에 추가하여 노드 주위를 조금 더 감싸는 데 도움이 될 것입니다. P 다른 언어로 작성된 대부분의 언어와는 매우 다른데, 비동기 기능은 다음 중 하나입니다. 노드의 주요 이점 – Brian

답변

0

그것은, 밝혀 MySQL과 응용 프로그램은 동일한 포트 (3306)를 사용하여 실행중인 것처럼. 앱의 포트를 3307로 바꾸는 것이 트릭을 만들었습니다.

1

여기 오류는 절차 적으로 node.js를 코딩하는 것입니다. 그렇지 않습니다.

connection.connect(function(err) { 
    if(err) { 
     console.log('error when connecting to database:', err); 
    } 
    console.log('Connected to the database'); 

    var queryString = 'SELECT * FROM blogs'; 

    //change from connection to "this" because you're inside the context of the connection object now 
    this.query(queryString, function(err, rows, fields) { 
     if (err) throw err; 

     for (var i in rows) { 
      console.log('Post Titles: ', rows[i].id); 
     } 
    }); 

}); 

Node.js는 작업 완료시 실행되는 일련의 콜백을 사용합니다. 따라서 DB에 연결 한 후 무언가를하고 싶다면 콜백 내부에서 해당 코드를 실행하십시오.

코드에서 수행하는 작업은 데이터베이스에 연결을 시도한 다음 연결되지 않은 데이터베이스를 쿼리하는 데이터베이스에 연결하는 동안 시도하는 것입니다.

원칙을 좀 더 자세히 설명하기 위해 노드 기능은 다음과 같은 일반적인 방법을 사용합니다.

//1 
myObj.myFunc(function(err , foo , bar) { 
    //A 
}); 

//2 
myObj.myOtherFunc(function(err , someVar) { 
    //B 
}); 

1은 항상 2. 전에 실행하고 B는 1, 2 마무리 실행시기에 따라 어느 순서로 실행할 수 있습니다. A는 1이 완료된 후에 항상 실행됩니다. B는 2가 완료된 후에 항상 실행됩니다. 분명한 일을하는 데 도움이

희망)

+0

코드를 교환 한 후에도 여전히 동일한 문제가 있습니다. (자습서에서 자습서를 가져 와서 동일한 형식을 반복해서 보았 기 때문에 자습서가 왜 그런 식으로 작성되었는지 혼란 스럽습니다.)하지만 그래도 여전히 같은 문제입니다. – Colton

관련 문제