node.js fs - “向后”流文件 - 从下到上

2024-01-06

使用 Node.js,将文件从文件系统流式传输到 Node.js,但从下到上向后读取它的最佳方法是什么?我有一个大文件,如果我只想要最后 10 行,从顶部读取似乎没有多大意义。这可能吗?

现在我有这个可怕的代码,我们使用浏览器执行 GET 请求来查看服务器日志,并传递一个查询字符串参数来告诉服务器我们想要读取日志文件末尾有多少行:

function get(req, res, next) {

    var numOfLinesToRespondWith = req.query.num_lines || 10;

    var fileStream = fs.createReadStream(stderr_path, {encoding: 'utf8'});

    var jsonData = [];   //where jsonData gets populated
    var ret = [];

    fileStream.on('data', function processLineOfFileData(chunk) {
        jsonData.push(String(chunk));
    })
    .on('end', function handleEndOfFileData(err) {
        if (err) {
            log.error(colors.bgRed(err));
            res.status(500).send({"error reading from smartconnect_stdout_log": err.toString()});
        }
        else {

         for(var i = 0; i < numOfLinesToRespondWith; i++){
                ret.push(jsonData.pop());
           }

          res.status(200).send({"smartconnect_stdout_log": ret});

        }
    });
}

上面的代码读取整个文件,然后在读取整个文件后将请求的行数添加到响应中。这很糟糕,有更好的方法吗?任何建议都会很高兴得到满足。

(上面代码的一个问题是它写出了日志的最后几行,但这些行的顺序相反......)

一种可能的方法是:

process.exec('tail -r ' + file_path).pipe(process.stdout);

但该语法不正确 - 所以我的问题是 - 如何将该命令的结果传输到 Node.js 中的数组中并最终传输到 JSON HTTP 响应中?


我创建了一个名为fs-backwards-stream这可能会满足您的需求。https://www.npmjs.com/package/fs-backwards-stream https://www.npmjs.com/package/fs-backwards-stream

如果您需要按行而不是字节块解析结果,您应该使用该模块fs-reverse https://www.npmjs.com/package/fs-reverse https://www.npmjs.com/package/fs-reverse or

这两个模块都可以流式传输,您可以简单地读取文件的最后 n 个字节。

这是一个使用普通节点 fs api 且没有依赖项的示例。

https://gist.github.com/soldair/f250fb497ce592c3694a https://gist.github.com/soldair/f250fb497ce592c3694a

希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

node.js fs - “向后”流文件 - 从下到上 的相关文章

  • 无限水平滚动 Div

    我需要一个 div 当您将鼠标进一步向右或向左移动时 它会水平滚动 我发现 Smooth Div Scroll 插件 http www smoothdivscroll com 非常接近我的需要 然而 这存在一些问题 我需要能够使滚动元素从设
  • 如何将 CAD (DWG) 文件转换为 GeoJSON?

    我正在使用 OpenLayers 需要将 DWG 文件转换为 GeoJSON 格式 我怎样才能做到这一点 事实上 GDAL 拥有完成此任务所需的工具 ogr2ogr 是 GDAL 中包含的一个程序 可以转换多种格式 https gdal o
  • 将 C# 3D 数组移植到 JS 3D 数组

    我开发了一个 C 库 它在 3 个项目中使用 这些项目在特定的代码段中中继 不过 我仍然需要在 javascript 中使用该代码 所以将其导出 问题是 我认为我无法复制同样的逻辑 比如这个问题我想了好几天也没有得出答案 在 C 库中 我有
  • 如何在严格模式下设置元素样式属性?

    Given body document getElementsByTagName body 0 iframe document createElement iframe iframe src protocol settings script
  • javaScript从单个值数组返回一个新的成对值数组[重复]

    这个问题在这里已经有答案了 可能的重复 将数组分割成块 https stackoverflow com questions 8495687 split array into chunks 我正在尝试将值数组转换为新的配对值数组 例如我需要转
  • 单击链接时如何将另一个 JSP 页面注入到

    我在一个JSP页面中有两个不同的部分 其中一个包含链接菜单 单击时 div2 id content 会相应加载不同的页面 我正在做类似的事情 div ul class navbar li a href Login jsp Login a l
  • 为什么 jQuery 的 .change() 事件仅在单击鼠标右键时触发?

    我在使用 jquery 时遇到了问题 change 当我修改输入元素时发生事件 据说 每当我对所述元素进行实时更改时 该事件就会触发 但就我而言 它仅在我按下右键单击按钮后才会触发 这是我的代码laravel框架 HTML div clas
  • 如何将身份验证详细信息传递给 iframe 内的应用程序?

    我有一个网页 想在其中显示詹金斯的网页 因此使用iframe like But http xxx xxx xx xx 8080 view Nightly 20Builds 20 打开登录页面 因此无法直接显示内容 其实我想在没有登录的情况下
  • 跳过测试文件 Jest 中的一项测试

    我正在使用 Jest 框架并有一个测试套件 我想关闭 跳过其中一项测试 谷歌搜索文档没有给我答案 您知道答案或需要检查的信息来源吗 我在这里找到了答案 https devhints io jest https devhints io jes
  • 获取与请求

    我正在使用 JSON 流并尝试使用 fetch 来使用它 该流每隔几秒发出一些数据 仅当流关闭服务器端时 使用 fetch 来使用流才可以访问数据 例如 var target the url var options method POST
  • 如何沿着 Parse Promise 链传递额外数据[重复]

    这个问题在这里已经有答案了 在我的 Parse Cloude 代码中 我需要运行几个连续的查询 每个查询都使用 find Example var promise firstQuery get objectId then function r
  • 在 Node.js 中封装 require 可以解决相对路径调用

    我正在尝试创建一个 require 包装器来加载依赖项 但我发现很难让它像原始的 require 函数一样工作 当路径是相对路径时 包装器无法解析为正确的路径 因为我的加载程序和调用程序文件不在同一文件夹中 这是一个简化的描述 index
  • 动态添加项目到放大弹出画廊

    有没有办法动态添加图库项目华丽的弹出窗口 http dimsemenov com plugins magnific popup 那已经开放了 或更新当前项目 找不到关于 in 的任何内容插件文档 http dimsemenov com pl
  • Google 脚本过滤一个值的范围

    我想过滤第 1 列中仅包含 Bob 特定值的行的 google 工作表范围 到目前为止 我的代码允许我过滤out第 1 列中有 Bob 的行 我需要相反 我想返回第 1 列中只有 Bob 的行 因此 其中 filterSettings 不是
  • Angular JS:当我们已经有了具有作用域的指令控制器时,指令的链接函数需要什么?

    我需要对范围和模板执行一些操作 看来我可以在以下任何一个中做到这一点link函数或controller函数 因为两者都可以访问该范围 什么时候我必须使用link功能而不是控制器 angular module myApp directive
  • 有条件地使用 Node.js 提供两个 React 构建

    我有两个基于设备向客户端提供服务的 React 应用程序 我使用 Node js 和 Express 来实现这一点 我借了static资产处理部分来自这个问题在这里 https stackoverflow com questions 644
  • javascript:新日期,缺少年份

    我打电话给 new Date Jan 4 发现默认年份是2001年 a new Date Jan 4 Thu Jan 04 2001 00 00 00 GMT 0500 EST 有什么办法可以将默认年份设置为 2011 年吗 更新 我知道我
  • 将 ERB 与 Handlebars 模板结合使用

    我有一个使用 ajax 创建新标签的模式 它使用 Tags 参数执行 POST 方法 而无需重新充电视图 因此 我希望根据所选的 price type 参数来呈现一个或另一个价格 div 我使用 Handlebars 所以我想这不是 rub
  • 如何使用FileSystem API的window.requestFileSystem?

    我用 JavaScript 编写了以下代码 JavaScript 代码 var fs null function initFS window requestFileSystem window requestFileSystem window
  • axios在自调用函数内部只调用一次(Internet Explorer)

    我有一个函数每 2 5 秒调用自己一次来检查后台运行的任务 它调用 axiosget如果响应错误 则返回一个 url 如果响应成功 我将停止该函数 这在 Chrome 和 Mozilla 上完美运行 但由于某种原因 它在 IE 版本 11

随机推荐

  • 接受_嵌套属性_for & :reject_if。在家长协会保存之前如何防止拒绝?

    class Gift lt ActiveRecord Base has many contributions accepts nested attributes for contributions reject if gt proc a a
  • Three.js - 将飞机缩放至全屏

    我将一架飞机添加到场景中 如下所示 Camera this three camera new THREE PerspectiveCamera 45 window innerWidth window innerHeight 0 1 60 Pl
  • Cassandra:什么是子列

    http wiki apache org cassandra Cas sandraLimitations http wiki apache org cassandra CassandraLimitations 引用 Cassandra 有两
  • 使用 JavaScript 加载 HTML 模板

    我正在努力寻找一个干净的解决方案来解决我的问题 并且想知道是否有人可以提供一些提示 我有 templates html 其中包含我想要加载到 JavaScript 中并使用的 HTML 片段集合 记住 templates html 不是加载
  • ASP.NET 成员身份更改密码后旧密码仍然有效

    我在一个小网站中使用 ASP NET 成员身份验证 我刚刚在测试过程中注意到一些有趣的事情 我试图让用户能够随时更改其登录密码 我将更改密码控件拖到表单中 我更改了测试帐户的密码 但现在所有密码仍然有效 我可以使用旧密码登录 也可以使用此特
  • 如何在 Python 中使用 MATLAB 中的 unique(a, 'rows') ?

    我正在将一些内容从 MATLAB 翻译成 Python 语言 有这个命令 unique a 在NumPy http en wikipedia org wiki NumPy 但由于 MATLAB 程序也运行 rows 命令 因此它给出的结果略
  • 使用管道插件在 jenkins 2.0 上安装节点

    我正在运行以下 docker 镜像jenkinsci jenkins 2 0 rc 1尝试 jenkins 2 0 和 管道 视图 我似乎无法安装节点 这是我的管道脚本 node tool name node 5 10 1 type jen
  • 是否有系统范围版本的首选项 API?

    在上一个问题中 我了解了首选项 API 不幸的是 它似乎只是用户特定的偏好 我还需要能够跨用户设置首选项 在 Java 中 独立于平台的方法是什么 EDIT 下面的信息很好 但是自从实施以来我遇到了一个障碍 首先在我的开发盒上进行了测试 W
  • 使用 Runnable 作为回调/子例程是不好的做法吗?

    使用它是否被认为是不好的做法Runnable作为回调 考虑到Runnable旨在与线程一起使用 请参阅它的JavaDoc 我想知道这是否可以 或者我是否应该为此目的创建自己的接口 我所说的是这样的 public class KeyBindi
  • CSS:从 2 而不是 1 开始对页面进行编号

    在 CSS 中 使用 page top right content Page counter page of counter pages 打印页面时 我可以在每页的顶部显示页码 这很好用 但现在 我怎样才能使页码以 2 而不是 1 开头呢
  • 如何让 R 根据方差分析得出 F 统计量的临界值?

    R 中的方差分析缺少的一件事是它不会自动显示临界值 其他的一切都给了 我可以看出我的 F 值远高于应有的值 但我想知道截止点的余量 有一个在线计算器可以根据自由度生成 F 统计量的临界值 但我希望 R 能够做到这一点 http www da
  • “git checkout 标签名”与“git reset --hard 标签名”

    我知道有这样的问题this https stackoverflow com questions 2541545 is there a difference between git reset hard hash and git checko
  • lambda 演算中的 Beta 约简:求值顺序重要吗?

    给定以下 lambda 表达式 其中 类似于lambda kf f c co km x dox le le 如果我转换的话会有错误吗 c co k into ko 我这样做了 但显然这是错误的 正确的方法是首先评估外部函数 这意味着 f f
  • 为什么 Django 1.9 在设置和 URL 中用列表 [] 替换 tuples () ?

    我有点好奇为什么 Django 1 9 在设置 URL 和其他配置文件中用列表 替换 tuples 我刚刚升级到 Django 1 9 并注意到这些变化 它们背后的逻辑是什么 INSTALLED APPS django contrib ad
  • 带 Joda 时间的本地化日期格式,不含年份

    我正在尝试以本地格式显示日期 但没有年份 所以应该是 12 June for UK June 12 for US 用Joda时间可以实现吗 我们尝试过 dd MMMM 模式 但它不起作用 我们已经尝试过了StringFormat longD
  • 使用 lodash 构建 Angular 2 CLI

    导入总是导致错误 找不到模块 lodash import from lodash 角度 cli build js module exports function defaults return new Angular2App default
  • 面对非阻塞I/O如何设计状态机?

    我正在使用 Qt 框架 该框架默认具有非阻塞 I O 来开发一个应用程序 该应用程序可以浏览多个网页 在线商店 并在这些页面上执行不同的操作 我将特定网页 映射 到状态机 我用它来浏览该页面 该状态机具有以下转换 Connect LogIn
  • 使用主构造函数继承类

    我有一个父类如下 interface ITask open class Task val targetServer Server ITask 然后有一个子级继承它并覆盖主构造函数 如下所示 data class FileTask val s
  • 使滚动条在 UIScrollView 上始终可见?

    我需要使滚动条在 viewDidLoad 上始终可见 以便用户可以了解有内容可以滚动 我做了以下事情 myscrollView flashScrollIndicators 但是滚动条只会在 viewDidLoad 之后出现一段时间 然后再次
  • node.js fs - “向后”流文件 - 从下到上

    使用 Node js 将文件从文件系统流式传输到 Node js 但从下到上向后读取它的最佳方法是什么 我有一个大文件 如果我只想要最后 10 行 从顶部读取似乎没有多大意义 这可能吗 现在我有这个可怕的代码 我们使用浏览器执行 GET 请