2016-09-30 3 views
0

우선 Node.js의 첫 번째 프로젝트 중 하나이기 때문에 새로운 개념입니다.데이터베이스를 사용하는 노드 - 비누 서비스 (종속성 문제)

필자는 Oracle 데이터베이스에 연결하는 SOAP (backward-compatibility, huh?) 인터페이스를 만들고 싶습니다.

그래서이 함수들이 어떻게 보이는지 (주소 및 내용에 대한 유효성 검사) WSDL이 있으며 데이터베이스에 연결되어 있습니다.

이제 SOAP npm 모듈을 사용할 때 서버를 만들고 요청에 응답 할 수있는 서비스를 청취해야합니다. SOAP 서비스가 포함 된 별도의 파일이 있지만이 서비스는 결과를 얻기 위해 데이터베이스에서 쿼리를 수행해야합니다.

SOAP 호출이 완료 될 때마다 내 데이터베이스 서비스의 올바른 메소드로이 데이터를 조율 할 수 있도록 내 SOAP 서비스에 데이터베이스 서비스를 '주입'하는 방법은 어떻게됩니까?

이 내 코드는 모습입니다 :

var DatabaseService = function (connection) { 
    this.database = connection; 
}; 

function doSomething(callback) { 
    if (!this.database) { console.log('Database not available.'); return; } 
    this.database.execute('SELECT * FROM HELP', function(err, result) { 
     callback(result); 
    }); 
}; 

module.exports = { 
    DatabaseService: DatabaseService, 
    doSomething: doSomething 
}; 

soapservice.js을

databaseconnection.js

var oracledb = require('oracledb'); 
var dbConfig = require('../../config/development'); 

var setup = exports.setup = (callback) => { 
    oracledb.createPool (
     { 
      user   : dbConfig.user, 
      password  : dbConfig.password, 
      connectString : dbConfig.connectString 
     }, 
     function(err, pool) 
     { 
      if (err) { console.error(err.message); return; } 
      pool.getConnection (
       function(err, connection) 
       { 
        if (err) { 
         console.error(err.message); 
         return callback(null); 
        } 
        return callback(connection); 
       } 
      ); 
     } 
    ); 
}; 

databaseservice.js

var myService = { 
    CVService: { 
     CVServicePort: { 
      countryvalidation: function (args, cb, soapHeader) { 
       console.log('Validating Country'); 
       cb({ 
        name: args 
       }); 
      } 
     } 
    } 
}; 

app.use(bodyParser.raw({type: function(){return true;}, limit: '5mb'})); 
app.listen(8001, function(){ 
databaseconnection.setup((callback) => { 
    var temp = databaseservice.DatabaseService(callback); 
    soapservice.Init(temp); 
    var server = soap.listen(app, '/soapapi/*', soapservice.myService, xml); 

    databaseservice.doSomething((result) => { 
    console.log(result.rows.length, ' results.'); 
    }); 
}); 
console.log('Server started'); 
}); 

가 어떻게 대신 countryvalidation 비누 방법에 databaseservice.doSomething()를 추가하는 방법에 대한 갈 것이라고 server.js '이름 : 인수'?

기타 : 내 코드의 구조가 매우 지저분 해 보인다. 나는 코드를 온라인으로 구조화하는 방법에 대한 좋은 예를 찾아 보았지만 서비스와 데이터베이스 연결 + 결합에 대해서는별로 찾지 못했다. 이 구조에 대한 모든 의견은 대단히 환영합니다. 나는 결국, 배울 것입니다.

당신에게

디터

답변

1

나는 그 조금 떨어져이 databaseconnection.js 외모 참조 우선 감사드립니다. 수영장을 만들어야합니다.하지만 그게 전부입니다. 일반적으로 연결은 요청이 들어 오면 풀에서 가져와야하며 요청을 처리하는 데 사용하면 연결이 해제되어야합니다.

이 게시물을보십시오 : https://jsao.io/2015/02/real-time-data-with-node-js-socket-io-and-oracle-database/ 도움이 될만한 몇 가지 샘플 응용 프로그램이 있습니다. 두 개의 데모 중 "employees-cqn-demo"앱이 더 잘 구성되었습니다.

포스트가 약간 날짜가 나왔다는 것을 명심하십시오. 이제 드라이버를 더욱 쉽게 사용할 수있게 개선되었습니다. Node.js와 Oracle Database를 사용하여 RESTful API를 작성하는 방법에 대한 게시물은 제 목록에 있지만 아직 할 수있는 기회는 없습니다.

+0

감사합니다. 나는 링크를 체크 아웃하고 구조가 작동하는 동일한 유형을 얻을 수 있었다.나는 나 자신을 알아낼 수 있어야한다. 정말 고마워. – syntax1993