2013-12-15 3 views
0

저는 node.js를 처음 사용하고 있으며 왜 내 코드가 항상 null을 반환하는지 궁금합니다.모듈은 항상 null을 반환합니다.

exports.getItems = function(){ 
    var conn = mysql.createConnection(); 
    conn.connect(); 

    conn.query("Select * From Items", function(err, rows, fields) { 
     if (err) throw err; 
     conn.end(); 
     return rows; 
    }); 
}; 

와 모듈 db.js 같이 호출 I가 가지고

var db = require('../db.js'); 
exports.items = function(req, res){ 
    var data = db.getItems(); 
    console.log('second', data); 
    res.end(data); 
}; 

및 노선 :

app.get('/api/items', api.items); 

CONSOLE.LOG를 ('제') 항상 "두 번째 정의되지 않음"입니다. 쿼리가 행의 항목을 반환하는지 확인했습니다.

상담하십시오.

답변

0

클래식 비동기 문제입니다.

getItems은 데이터베이스 쿼리가 완료되기 전에 되돌아갑니다. 데이터베이스의 데이터는 함수 자체가 아니라 콜백으로 반환됩니다.

당신은 쓸 때 :

var data = db.getItems(); 
console.log('second', data); 
res.end(data); 

data의 값이 undefinedgetItems 내부 return 문이 없기 때문입니다! 따라서 getItems은 자바 스크립트 규칙에 따라 정의되지 않은 값을 반환합니다. 당신이 필요로하는 무엇

이 같은 것을 (그리고 내가 이것을 테스트하지 않았습니다 양해 바랍니다)입니다 :

exports.items = function(req, res){ 
    var conn = mysql.createConnection(); 
    conn.connect(); 
    conn.query("Select * From Items", function(err, rows, fields) { 
    conn.end(); 
    if (err) throw err; 
    res.end(rows); 
    }); 
} 

깔끔하게 연결 관리를위한 다양한 온라인 사이트를 참조하십시오. 그러나 이것은 데이터가 실제로 사용 가능한 곳인 query의 콜백에서 응답을 보내야한다는 것을 이해하게하려면 충분해야합니다.

+0

코드를 다음과 같이 변경했지만 해상도가 계속 유지되지 않습니다. – jmogera

+0

"TypeError : '정의되지 않은 json'메서드를 정확히 호출 할 수 없습니다. – jmogera

+0

쿼리 콜백의 첫 번째 행으로'rows' 값을 인쇄 해보십시오. –

관련 문제