如何将大块数据加载到角度ngTable中

时间:2017-04-21 17:49:19

标签: javascript angularjs node.js oracle ngtable

我希望能够使用Angularjs ngTable查看相当大的遗留oracle数据库表。 (我是使用MEAN堆栈的新手。) 我使用node-oracledb从oracle数据库读取,遵循以下示例:(https://github.com/oracle/node-oracledb/blob/master/doc/api.md#resultsethandling

我的服务器端代码以1000行块的形式从数据库中读取数据。就读取数据而言,这似乎有效,但我的角度客户端似乎没有得到结果。使用Firefox Web控制台我可以看到JSON数据最终出现在响应中,但它似乎不适用于我的应用程序端角度控制器。

使用angular将这些数据加载到ngTable中的最佳方法是什么?我是否需要改变我的服务器端方法,只需使用" res.write()"使用流媒体库?我不太了解角度客户端如何读取以块发送的数据。

我的Nodejs服务器端代码,用于从oracle表加载数据:

var numRows = 1000;  // number of rows to return from each call to getRows()
connection.execute(
  mySqlStr,
  [], // no bind variables
  { resultSet: true }, // return a Result Set.  Default is false
  function(err, result)
  {
    if (err) { . . . }
    fetchRowsFromRS(connection, result.resultSet, numRows);
  });
});

function fetchRowsFromRS(connection, resultSet, numRows)
{
  resultSet.getRows( // get numRows rows
    numRows,
    function (err, rows)
    {
      if (err) {
         . . .      // close the Result Set and release the connection
   } else if (rows.length > 0) {   // got some rows
    res.write( JSON.stringify( rowsToJson( rows, columns ))); // write rows to response for client
    if (rows.length === numRows)  // might be more rows
      fetchRowsFromRS(connection, resultSet, numRows);
    else                          // got fewer rows than requested so must be at end
      . . .                       // close the Result Set and release the connection
  } else {                        // else no rows
      . . .                       // close the Result Set and release the connection
    }
  });
}

rowsToJson函数只是使用result.metaData中的列名将每行的数据数组转换为JSON。

在客户端,我有类似的东西:

在我的app控制器中:

vm.myTableParams = new NgTableParams( ... );
...
DataService.loadByQuery( query )
.then( function( data ){
    vm.myTableParams.settings( {dataset: data} );
});

在我的应用程序DataService中:

function loadData( params ){
    Var d = $q.defer();
    Datasource.load( params )
    .$promise.then(
        function success(data){
            Return d.resolve(data);
        },
        function error(data){
        }
    );
    return d;
}


Function loadByQuery( query ){
    Return loadData( query ).promise;
}

在我的app datasource.service中:

var load = {
    method: METHODS.GET,
    url: 'api/v1/Datasource/:datasource 

}

4-21-2017编辑:我刚看到这个:Loading large datasets with AngularJS

试图弄清楚它是如何运作的......

0 个答案:

没有答案