【问题标题】:Large JSON Data not shown in console大型 JSON 数据未显示在控制台中
【发布时间】:2014-12-16 15:01:50
【问题描述】:

我正在使用 node.js 并创建了一个模块来从 sql server 数据库中获取数据。数据以 JSON 格式检索。 这是代码

b.js

var mssql = require('mssql');

var config = {
    user: 'sa',
    password: 'scott',
    server: 'MSSQL2008',
    database: 'AdventureWorks',
    stream: false
};

var msconnection = new mssql.Connection(config, function (err) {
    if (err) console.log(err);
});

        module.exports.getCustomersDetails = function (callback, id) {
            var request = new mssql.Request(msconnection);

            //Add Parameters to the SP 
            if (id != null) {
                request.input('ID', id);
            }

            request.execute('CUSTOMER_DETAILS_GET', function (err, recordsets, returnValue) {  // get data
                if (err) console.log(err);

                responseContent = {
                    recordDataKey: 'data',
                    data: recordsets[0]
                };
                callback(responseContent);
            });
        };

a.js

var c = require('./b.js');
c.getCustomersDetails(function (responsecontent) {
    console.log(responsecontent);
},  '101,202,303,505,808, 100, 200, 300, 400');

当我运行 a.js 时,控制台什么也没有显示,那是因为表中有很多记录。 有人可以建议我如何获取所有记录吗?任何帮助将不胜感激。

编辑:我在一行中有 25 列,因此它为我带来了前 140 条记录,但是当我写到前 150 或全部在 SP 中时,它不会在控制台中显示任何内容。

更新: 谁能帮助我并建议在这种情况下我们如何进行流式传输?

【问题讨论】:

    标签: json node.js


    【解决方案1】:

    异步又来咬你了!

    var c = require('./b.js');
    // start loading the db
    // it's not ready yet when you call the function!
    c.getCustomersDetails(function (responsecontent) {
    console.log(responsecontent);
    },  '101,202,303,505,808, 100, 200, 300, 400');
    

    您需要重写您的模块以使用初始化函数和回调。我会做类似的事情:

    c.init(function(){
        c.getCustomersDetails(); // ...
    });
    

    var msconnection;
    exports.init = function(callback){
        msconnection = new mssql.Connection(config, function (err) {
            if (err) console.log(err);
            callback();
        });
    };
    

    【讨论】:

    • 感谢 Scimonster 的回复。上面的代码在很少有记录说 100 时给我结果,但是当总记录数超过说 6000 时它什么也不显示。
    • 正如我所说(在代码 cmets 中),当您调用 getCustomersDetails 函数时,数据库尚未加载,这就是您需要回调的原因。
    • 是的,我使用了回调,它返回的所有值都是 JSON 很小但是一旦有很多数据它就会中断。
    • 您正在使用回调来等待数据库加载?也就是说,你需要使用new mssql.Connection中的回调。
    • 我已经尝试过你的解决方案 Scimonster 但它也没有显示结果。如前所述,它是 25 列行,有数十亿行,因此 request.execute 方法代码中断并且不显示任何结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多