node.js - stdout 总是在字符 8192 处切断流

标签 node.js curl stdout child-process spawn

我正在使用spawn模块并执行curl命令并从服务器获取JSON响应。这是我的代码 -

var spawn = require('child_process').spawn;
log.debug("Executing curl command for getting all artifacts");

var artifacts_data = spawn('bash module_features/init_get_all_artifacts.sh', [
    host_url, access_token, project_id
], {
        shell: true
   });
artifacts_data.stdout.setEncoding('utf8');
var stdout = "";
artifacts_data.stdout.on('data', (data) => {
    stdout += data.toString();
    try {
        var artifact_array = JSON.parse(stdout);
        log.debug(artifact_array);
        if (artifact_array != null || artifact_array != undefined){
            res.send(200, { status: 'success', message: artifact_array });
        }else{
            log.debug('Artifact list not found.');
            res.send(400, { status: 'error', message: 'In else :: somthing went wrong' });
        }
    } catch (error) {
        log.debug("There was some error in parsing artifacts JSON");
        res.send(400, { status: 'error', message: 'somthing went wrong' });
    }

});

但是,我得到了半个字符串(8192 个字符),这是不正确的 JSON。 请帮助我增加标准输出的字符限制或任何替代解决方案。

感谢任何帮助。

最佳答案

我解决了这个问题。

var data = '';
artifacts_data.stdout.on('data',(data) => {
    stdout += data.toString();
});

artifacts_data.stdout.on('end',(data) => {
    try {
         var artifact_array = JSON.parse(stdout);
         log.debug(artifact_array);
         if (artifact_array != null || artifact_array != undefined){
            res.send(200, { status: 'success', message: artifact_array });
         }else{
              log.debug('Artifact list not found.');
              res.send(400, { status: 'error', message: 'In else :: somthing went wrong' });
         }
    } catch (error) {
          log.debug("There was some error in parsing artifacts JSON");
          res.send(400, { status: 'error', message: 'somthing went wrong' });
    }

});

如果我们在 Web 应用程序中处理 IO,我们必须坚持使用异步方法。

关于node.js - stdout 总是在字符 8192 处切断流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49150741/

相关文章:

python - 扩展 Python 记录器

javascript - 是否可以将 javascript 引用转换为数字或哈希和?

javascript - 使用 Node.js 和 Handlebars 循环访问 Mongo 数据库

javascript - 在 node-sass@0.9.6 安装脚本 'node build.js' 失败

json - GitHub API 问题 - 列出已加星标的存储库

php - 自分配证书上的 CodeIgniter-cURL

android - 建立 Node.Js 本地服务器(localhost : 8888) on WiFi though WiFi Router (Passing it through LAN to WiFi Router)?

php - 找不到套接字传输 "username"(cURL 或 docker 容器内的 composer)

java - 在 Java 中,如何将 System.out 重定向到 null 然后再次返回到 stdout?

ios - 有没有办法快速拦截标准输出?