2016-09-30 61 views
0

首先,這是我在Node.js中的第一個項目之一,所以我對它很陌生。使用數據庫的node-soap服務(依賴關係問題)

我有一個項目,我想讓它成爲一個連接到Oracle數據庫的SOAP(我知道,SOAP ...向後兼容性,呵呵)接口。

所以我有一個WSDL描述這些函數是什麼樣子(地址和東西的驗證),我有一個連接到數據庫。

現在,當使用SOAP npm模塊時,您需要創建一個服務器並使用允許您響應請求的服務來偵聽。我有一個包含我的SOAP服務的單獨文件,但此服務應對數據庫執行查詢以獲取其結果。

我該如何去將我的數據庫服務注入到我的SOAP服務中,以便每當SOAP調用完成時,它就會將它編排到我的數據庫服務中正確的方法中?

這是我的代碼如下所示:

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 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

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

server.js

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'); 
}); 

我怎麼會去加入databaseservice.doSomething()到countryvalidation肥皂方法,而不是 '名稱:ARGS'?

另外:我覺得我的代碼結構非常非常混亂。我試圖找到一些關於如何在線構建代碼的好例子,但是對於服務和數據庫連接+將它們結合起來,我沒有找到太多東西。對此結構的任何評論都非常受歡迎。畢竟,我在這裏學習。

謝謝

迪特

回答

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數據庫構建RESTful API的文章,但我還沒有機會做到這一點。

+0

謝謝。我檢查了鏈接,並設法使相同類型的結構工作。我應該能夠自己找出其他問題。非常感謝。 – syntax1993