我希望能够使用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
试图弄清楚它是如何运作的......