3

trireme-jdbc を使用して openge データベース接続を確立するためのデータ層 API を設計しました。cygwin を使用して trireme コマンドでファイルを実行している場合、コードは正常に動作していますが、コマンド 'a127 project start' を使用して apigeetool を介して完全なプロジェクトを開始すると、trireme に関するエラーがスローされます。trireme-jdbc と一緒にデータベース接続プーリングに generic-pool パッケージを使用しました。これは apigee API であるため、フォルダ構造は完全に apigee 標準に従っており、ここでも swagger が使用されています。

var a127 = require('a127-magic');
var express = require('express');
var Pool = require('generic-pool').Pool;
var jdbc = require('trireme-jdbc');
var app = express();

module.exports = app; // for testing



// initialize a127 framework
a127.init(function(config) {

  // include a127 middleware
  app.use(a127.middleware(config));

  var pool = new Pool(
        {
            name : 'Suppllier Collaboration - @Anil',
            create : function(callback) {
                var connOpenedge = new jdbc.Database(
                        {
                            url : 'jdbc:datadirect:openedge://serverhost:portno;DatabaseName=xxxxx',
                            properties : {
                                user : 'db_user',
                                password : 'db_password',
                            },
                        });
                callback(null, connOpenedge);
            },
            destroy : function(client) {
                client.end();
            },
            max : 10,
            min : 2,
            idleTimeoutMillis : 30,
            log : true

        });

  // error handler to emit errors as a json string
  app.use(function(err, req, res, next) {
      console.log('we are just enter in  app.js file');

    if (typeof err !== 'object') {
      // If the object is not an Error, create a representation that appears to be
      err = {
        message: String(err) // Coerce to string
      };
    } else {
      // Ensure that err.message is enumerable (It is not by default)
      Object.defineProperty(err, 'message', { enumerable: true });
    }

    // Return a JSON representation of #/definitions/ErrorResponse
    res.set('Content-Type', 'application/json');
    res.end(JSON.stringify(err));
  });

  pool.acquire(function(err, conn) {
    if (err) {
        throw err;
    } else {
        app.get("/getData", function(req, res) {
        conn.execute('select * from "po" where "po-num" = ? and "vend-num" = ? ', 
                [4322452, 4301170 ], function(err, result, rows) {

            if (err)
                 res.json("Sorry !Error to get data from symix....");

            else
                res.json(rows);
        });

    });
    }
});


  var ip = process.env.IP || 'localhost';
  var port = process.env.PORT || 10010;
  // begin listening for client requests
  app.listen(port, ip);
  console.log('we are inside app.js file');
  console.log('try this:\ncurl http://' + ip + ':' + port + '/hello?name=Scott');
});
4

1 に答える 1

1

私は SQL の専門家ではありませんが、SQL が有効でないか、データが返されないように見えます。

まず、プレーンな SQL クライアントを使用してテストします。他に何も設定していない場合、Progress は「sqlexp」というコマンド ライン ツールを同梱しています。サーバーの「proenv」ウィンドウから実行して、そのクエリが機能するかどうかを確認できるはずです。

proenv> sqlexp -user userName -password pwd -db dbName -S port

そして、その SQL を次のように書いたほうがよいかもしれません。

select * from "PUB.po" where "PUB.po.po-num" IS NULL and "PUB.po.vend-num" IS NULL ; 
于 2016-07-22T18:40:47.850 に答える