2016-11-16 7 views
0

Node, Express 및 MySQL에 기본 웹 응용 프로그램을 작성하고 있습니다. 사용자가 계정을 만들고, 다른 사람들의 계정을보고, 프로필에 정보를 게시 할 수있는 기본적인 사이트입니다. 노드와 자바 스크립트를 배우기 위해 만들었습니다. 그래서 userlist를 만들었고 데이터베이스의 모든 사용자를 반환하는 멋진 함수를 만들었습니다. 지금NodeJS/Javascript 함수는 undefined를 반환합니다.

function getAllUsers() { 
    var query = " \ 
    SELECT \ 
     id, username, email, password \ 
    FROM \ 
     users \ 
    "; 
    connection.query(query, function(err, rows) { 
     if (err) throw err; 
     return rows; 
    }); 
} 

내가 여기에이 기능을 사용하고 있습니다 : 여기에 코드입니다

router.get('/list', function(req, res) { 
    var users; 
    users = getAllUsers(); 
    res.render('user/list', {'title': 'Users', 'users': users}); 
}); 

을하지만 사용자는 정의되지 않습니다. 왜 이런거야?

여기 MySQL의 연결이 제대로 작동 확실 해요,하지만 나는 그것이 유용 단지의 경우, 연결 방법은 다음과 같습니다

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

connection.connect(); 

감사

--- 편집 - - 나는 또한 getAllUsers() 함수에서 정의 된 행을 언급해야한다고 생각했지만 일단 반환하면 더 이상 정의되지 않습니다.

+1

getAllUsers는 비동기이며 값을 반환하는 방법은 무엇입니까? [이 하나를보십시오] (http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call?noredirect=1&lq=1) –

+0

잠시만 기다려주십시오 ... 나는 이것이 중복으로 표시되어야한다고 생각하지 않습니다. 내 질문은 "어떻게 비동기 함수에서 돌아온다"... 대답은 관련이 있지만, 질문은 아니었다 ... – IHazza

답변

1

콜백 함수가 쿼리가 여전히 실행 종료와 "사용자"변수 끝이 정의되어 있지 않다고 할 때, 의미 구조 (가장 간단한 답)

귀하의 쿼리가 실행되는 비동기로.

그냥 이렇게 :

function getAllUsers(callback) { 
    var query = " \ 
    SELECT \ 
     id, username, email, password \ 
    FROM \ 
     users \ 
    "; 
    connection.query(query, callback); 
} 

router.get('/list', function(req, res) { 
    getAllUsers(function(err, rows) { 
      // Or better yet, respond with the correct html code 
      if (err) throw err; 

      res.render('user/list', {'title': 'Users', 'users': rows}); 
    }); 
}); 

그것은 꽤 잘 작동합니다. 콜백/약속/관찰자에 관한 연구

+0

당신이 맞아요. 'getAllUsers' 디자인 상 아무것도 반환하지 않습니다. 콜백 메소드를 통해 값 * 만 *을 생성합니다. – tadman

+0

고마워요, 이것도 잘 작동했습니다 : D – IHazza

0

돌아 오는 것을 잊지 않았습니까?

function getAllUsers() { 
    ... 

    var query_result = connection.query(query, function(err, rows) { 
    if (err) throw err; 
    return rows; 
    }); 

    return query_result; 
} 
+0

아하 ... 나는 getAllUsers() 함수보다는 쿼리 함수에서 돌아왔다. ...이 코드는 정의되지 않은 행에 대해 불만을 제기합니까? – IHazza

+0

내 대답을 편집했습니다. 지금 시도하십시오. – medik

+0

고마워요, 완벽하게 일했습니다. 나는이 사실을 내가 눈치 채지 못하고 놀랐다. – IHazza

관련 문제