2016-09-30 58 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