2017-01-03 4 views
-2

저는 node.js를 처음 사용하고 학교 프로젝트에서 약속을 사용하고 싶습니다. 내가 온라인 및 스택에 몇 가지를 발견 :약속 Node.js mysql

이 나를 위해 노력하고 있습니다
router.post('/matchaSearch', function(req, res) { 
    var username = session.uniqueID; 
    var searcherPackage = {}; 

    function userAgeCheck(randomParam) { 
    return new Promise((resolve, reject) => { 
     pool.getConnection((err, connection) => { 
     var query = 'SELECT username, age, orientation, sex FROM usersinfo WHERE username != ?'; 
     connection.query(query, [username], (err, rows, fields) => { 
      connection.release(); 
      return err ? reject(err) : resolve(rows); 
     }); 
     }); 
    }); 
    } 

    userAgeCheck('username') 
    .then((rows) => { 
     /*console.log(rows);*/ 
     searcherPackage = rows; 
     console.log(searcherPackage); 
     // do stuff 
    }).catch((err) => { 
     throw err; 
    }); 
}); 

, 그것은에서 나에게 모든 것을 반환 Use promise to process MySQL return value in node.js

하지만 질문이, 지금까지이 내가 가진 무엇 db except me (사용자 이름). 하지만 나에게 이것은 옳지 않다. 무작위 매개 변수를주는 것이 좋은 이유는 무엇입니까?

그래서 'randomParam'대신 param으로 'username'을 지정해야합니다.하지만 그렇게하면 쿼리는 나를 제외한 모든 사용자 대신 모든 것을 반환합니다. 그래서 나는 그것을 제거하고 방금 'randomParam'을주었습니다. 설명 할 수 있습니까? 이 일을 제대로하고 있습니까? 그렇다면 계속 프로젝트를 수행 할 수 있습니다. 도움을 주셔서 감사합니다.

+0

따옴표 붙은 코드의'randomParam'에 의해 제공되는 목적이 없습니다. 그것은 당신의 코드입니다, 안 그래요? 그런데 왜 그곳에 있습니까? 그것은 무엇을해야 했습니까? –

+1

'pool.getConnection' 콜백에서'err'을 검사해야합니다. 또는 Bluebird와 같은 라이브러리를 사용하고 적절하게 체인을 연결할 수 있도록 이러한 메서드를 제공하고 오류가 반환 된 약속을 자동으로 거부하도록합니다. – cdhowie

+0

'Promise.promisify'를 사용하면 Node.js 스타일의 콜백 메소드를 자동으로 약속으로 변환하여 자신 만의 래퍼를 작성할 필요가 없다는 것을 잊지 마십시오. – tadman

답변

1

userAgeCheck (userAgeCheck('username'))을 호출하면 하나의 인수를 전달합니다. "username"이라는 단어가 포함 된 문자열 리터럴. 이것은 randomParam에 할당되고 다음은 절대 사용자은 무의미합니다.


당신은 스크립트의 상단에 변수를 정의 :

쿼리는 username != ?의 자리 값으로 username 변수의 값을 전달하게 var username = session.uniqueID;.

더 넓은 범위에서 변수 username을 읽으므로이 값은 session.uniqueId입니다.

결과적으로 사용자 이름이 session.uniqueId 인 사용자를 제외한 모든 결과가 반환됩니다. 당신이 randomParamusername에 이름을 바꾸면


, 당신은 값 "username"username라는 새로운 지역 변수가 있습니다.

결과적으로 사용자 이름 사용자 이름이 사용자 이름 인 경우를 제외한 모든 결과가 반환됩니다.


는 인수로 이름을 전달하려는 경우

는 당신은 userAgeCheck(username)userAgeCheck('username')을 변경해야합니다. 즉 문자열 리터럴을 변수 이름으로 바꿉니다.

+0

답장을 보내 주셔서 감사합니다. 내 [사용자 이름] 내 connection.query 내 var username = session.uniqueID 내 코드 상단에? 그래서 함수'function userAgeCheck (randomParam)'을 선언 할 때 매개 변수를 주어야합니까? 내가 왜 그것을해야합니까? – pkerckho

+0

@pkerckho - 매개 변수를 사용하지 않으려면 인수 목록에 매개 변수를 정의하지 말고 함수를 호출 할 때 매개 변수를 전달하지 마십시오. 그것을 사용하려고한다면, 어디서나 같은 이름을 사용하고 문자열 리터럴 대신에 전달하고자하는 * 변수 *를 전달하십시오. – Quentin

+0

알았어, 도와 줘서 고마워! 매개 변수가없는 작은 함수가 있으면 12 개를 만들고 db의 모든 데이터를 객체에 넣은 다음 매개 변수로 객체를 사용하여 마지막 함수를 만듭니다. 나는 그것이 옳은 생각이라고 생각한다! 고마워요! – pkerckho