2013-07-17 3 views
0

저는 Node.js의 초보자입니다. MySQL을 글로벌 var로 사용해도 괜찮습니까?Node.js와 글로벌 MySQL 연결 OBJ

나는 내 코드와 db_helper.js이 : 내 main.js에

global.client = require('mysql').createConnection({ 
    user: '__mysqluser__', 
    password: '__mysqlpass__', 
    database: '__mysqldb__', 
    timezone: '-03:00' 
}); 
global.client.connect(); 

난 그냥 할을 A :

I 업데이트해야 할 때마다 JS 다른 파일에 다음
require('db_helper'); 

또는 SELECT로 전화하십시오 :

global.client(query, data); 

아직 어떤 코드도 보지 못했지만 예상대로 작동하지만 임의적으로 발생합니다 페이지를 다시로드 할 때 때때로 충돌합니다.

이렇게 사용해도 괜찮습니까? 내 충돌이 DB에 연결하는 방식과 관련이 있습니까?

나는 사고가 발생했을 때 MySQL은 데이터를 반환하지 못하기 때문에, 때문에이 관련 있다고 생각하지만, 그 결과를 분석 할 때 충돌이 같은 일이 :

는 대부분의 시간을
global.client.query(query, function(err, results, fields) { 
    if (err) throw err; 
    if (results && Object.prototype.toString.call(results) === '[object Array]') { 
     var j = result[0].data; 
    } 
} 

, var에 J가있다 가치를 기대하지만, 노드가 충돌 할 때,이 var은 이전에 일관성을 검사한다는 사실에도 불구하고 빈 값을 반환합니다. 노드가 다음과 같이 말합니다.

result[0].data is undefined 

감사합니다.

편집 : 클라이언트 js 파일이 서버에서 업데이트 될 때마다 충돌이 발생합니다. (FTP를 통해 & 서버 업로드) .js 파일의 로컬 편집 후, 왜?

답변

4

보다 일반적인 방법은, 대신 (모호한 코드, IMO있게) global에서 물건을 저장하는, 그것을 수출하는 것입니다 :

// db_helper.js 
var client = module.exports = require('mysql').createConnection({ 
    user: '__mysqluser__', 
    password: '__mysqlpass__', 
    database: '__mysqldb__', 
    timezone: '-03:00' 
}); 
client.connect(); 

// somewhere else 
var client = require('db_helper'); 

코드가 충돌하는 이유 당신이하지 않은 것입니다 배열 검사 : 이유에 관해서는

client.query(query, function(err, results, fields) { 
    if (err) throw err; 
    if (results.length) { // don't need to check if it's an array 
    var j = results[0].data; 
    ... 
    } 
} 

: 당신의 SERV에 (또는 오히려 결과를) 실행중인 쿼리가 서로 다른 결과를 얻을 수 있다고 생각하지 않을 것이다 어.

+0

왜 글로벌 var을 사용하지 말아야하는지에 대한 의견을 피력 하시겠습니까? 내 말은, 그것은 이유가 존재하고 그것이 수출을 사용하지 않고 예상대로 작동한다는 것입니다 (멋진 접근 방식입니다). –

+0

@AntonioMax 전역 변수와 관련된 주요 쟁점 중 하나는 어디에서나 정의 할 수 있기 때문에 존재하는 곳을 추적하기가 정말 어렵다는 것입니다. 문제가되지 않을 수도있는 소규모 프로젝트의 경우 더 큰 프로젝트에서 가능합니다. – robertklep

+0

네, 아주 작은 프로젝트입니다. 약 70 줄의 코드가 있습니다.이 노드는 정말 깔끔합니다 .js. 어쨌든 답해 주셔서 감사합니다. mysql 풀링과 긴 풀링을 사용하는 충돌에 대한 임시 수정본이 있습니다. 나중에 원본 게시물을 업데이트 할 예정입니다. 감사합니다. –