0

首先,这是我在 Node.js 中的第一个项目之一,所以我对它很陌生。

我有一个我想做的项目,它是一个连接到 Oracle 数据库的 SOAP(我知道,SOAP...向后兼容,嗯?)接口。

所以我有一个 WSDL 来描述这些函数的样子(地址和东西的验证),并且我有一个到数据库的连接。

现在,当使用 SOAP npm 模块时,您需要创建一个服务器并使用允许您响应请求的服务进行侦听。我有一个单独的文件,其中包含我的 SOAP 服务,但该服务应该对数据库进行查询以获取其结果。

我将如何将我的数据库服务“注入”到我的 SOAP 服务中,以便无论何时完成 SOAP 调用,它都会将其编排为我的数据库服务中的正确方法?

这就是我的代码的样子:

数据库连接.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);
                }
            );
        }
    );
};

数据库服务.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
};

肥皂服务.js

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

服务器.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 soap 方法而不是'name:args'?

另外:我觉得我的代码结构非常非常混乱。我试图找到一些关于如何在线构建代码的好例子,但至于服务和数据库连接+组合它们,我没有找到太多。非常欢迎对此结构提出任何意见。毕竟我是来学习的。

谢谢

迪特

4

1 回答 1

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 的文章,但我还没有机会这样做。

于 2016-09-30T22:15:38.943 回答