2016-12-23 1 views
0

mssql 데이터베이스를 사용하는 nodejs 응용 프로그램부터 시작했습니다. 암호화/암호 해독 목적으로, 나는 데이터베이스에 저장된 키를 암호화 했으므로 암호를 해독 할 때마다 먼저이 값을 얻기 위해 데이터베이스에서 호출해야하고, 데이터베이스 호출의 콜백에서 해독 한 다음 해독의 다른 콜백에서 해독해야합니다. function이 값을 사용하여 암호화 기능에 전달합니다.Nodejs - 응용 프로그램에서 데이터베이스에서 값을 가져 와서 나중에 사용할 수 있습니다.

sql.query("query to get key", [parameters], 
      function (data) { 
       if (data && (data.length == 1)) {  
        Decrypt(data[0].Key, iv, salt, function (data) { 
         var decryptedKey = data; 
         Encrypt(inputData, decryptedKey, function (data){ 
          var encryptedData = data; 

내가 원하는 실제로 시작 응용 프로그램에 대한 데이터베이스에서 그걸 얻기 위해 어디서나 사용할 수 변수에 어딘가에 (decryptedKey)을 저장할 다른 장소에 논리를 이동 "데이터베이스에서 키를 얻고 그것을 해독"하는 것입니다 :

그래서
sql.query("query to get key", [parameters], 
      function (data) { 
       if (data && (data.length == 1)) {  
        AESDecrypt(data[0].Key, iv, salt, function (data) { 
         var decryptedKey = data; 

, 워크 플로우는해야한다 :

  • 시작은 데이터베이스에이 비동기 호출을 응용 프로그램에게
  • 을 nodejs ,이 키를 얻을 암호를 해독하고 전역 변수
  • 에 저장 이미 별도의 도우미 파일을 이동하려고

기능을 암호화하는 더 전화에서 사용하고 단지 파일 곳이 헬퍼 파일을 포함 암호화/해독 논리가 있지만 단어 "비동기"은 혼란을 야기합니다. 헬퍼를 읽고 암호화/복호화를 수행하지만 암호화 로직이 비동기 적으로 사용하기 전에이 도우미가 초기화하여 KEY 값을 반환했는지 확인할 수 없습니다. 콘솔에서 "처리되지 않은 약속, 거부하겠다고 약속 함"과 같은 오류 메시지가 표시됩니다.

Encrypt (inputData, decryptedKey) 함수가 decryptedKey를 사용하기 전에 decryptedKey가 초기화되는 것을 보장하지 않습니다.

나는() (이 app.run되고, 각도에) 같은 nodejs에 뭔가가 무엇을 수행 할 수 있습니다

application.start() { 
    // do some logic before all other actions 
} 

답변

0

당신은 두 번째로() application.listen를 호출 기능을 전달해야 인수는 서버가 시작하자마자 실행됩니다.

application.listen(9090,function(){ 
    //do some logic before all other actions 
}); 
+0

당신은 의미 :.. 'application.listen (포트, 기능() { sql.query ("쿼리 키를 얻기 위해"[매개 변수], 기능 (데이터) { });' 좋아,이 듣기 기능 밖에서 사용할 수 있도록 글로벌 수준에서 검색된 값을 저장하고 프로젝트 등에서 도우미, 경로 및 기타 파일에 사용할 수있는 방법은 무엇입니까? – frnfla

+0

왜 저장하고 있습니까? 서버가 시작될 때마다 데이터베이스를 가져와야하는 경우 데이터베이스의 값은 무엇입니까? 일부 구성 파일에 유지하지 않는 이유는 무엇입니까? –

+0

그 이유는 요청 때문입니다. 그의 키는 데이터베이스에 암호화되어 있습니다. 믿어, 나도 설정에 저장되기를 바랐다. 내가 질문에서 언급했듯이, 나는 db로부터 검색하고 모든 암호화/복호화 호출에서 그것을 해독하는 솔루션을 가지고 있으며, 지금은 "콜백 (callbacks)"을 가지고있는 것처럼 나쁜 습관으로 보인다. 앱을 시작할 때 한 번만 할 수 있다면 db에 대한 호출과 키 해독과 관련하여이 두 콜백을 제거 할 수 있습니다. – frnfla

0

해결책을 찾았습니다. 콜백 함수를 매개 변수로 받아들이고, DB에서 키를 가져와 해독 한 다음 성공시 콜백 함수에 전달하는 도우미 함수입니다.

var decrypted = ''; 

var funcName= function (callback) { 
    //get and decrypt key logic 
    callback(data); 
} 

그런 다음 그 도우미에서 동일한 기능을 호출하고 그것을 데이터 "해독"내 전역 변수를 초기화 콜백 함수를 통과 : 다음

funcName(function (data) { 
    decrypted = data; 
}); 

실제로 사용되는 도우미의 다른 기능을 가지고 어디에 있든 앱 코드에서 암호화/암호 해독 조치가 필요한 곳.또한 매개 변수로 콜백을 취

getDecrypted: function (callback) { 
    if (decrypted == '') { 
     funcName(function (data) { 
      decrypted = data; 
      callback(decrypted); 
     }); 
    } 
    else { 
     callback(decrypted); 
    } 
}, 

그래서, 응용 프로그램 시작에, 나는 내 "해독"변수에 데이터가 초기화 얻을 것이다, 나는 그것을 필요로 응용 프로그램에, 난 그냥 도우미를 포함 getDecrypted 기능을 사용할 때마다, 콜백 내 암호화 또는 암호 해독 기능을 사용하여 :

var helper = require('helper'); 

helper.getDecrypted(function (decrypted) { 
     encryptLogic(input, decrypted, function (data) { 
     . 
     . 
     . 

그래서 funcname에 초기화 응용 프로그램 시작시 한 번만 호출됩니다 도우미에서 변수를 "해독".

관련 문제