在NodeJS中,如何将流终止于某个特定的字符串?

问题描述

我有一条Express路线,点击该路线时会生成一个单独的流程,然后将该流程的标准输出流式传输给用户

我只对那个单独过程的输出的第一部分感兴趣,并且想在stdout包含某些字符集(例如{{1时)结束流(并关闭用户的连接) }}。

这是我的Expressjs代码

-----

以下是我的流程中的一些标准输出示例:

const express = require('express')
const router = express.Router()
const {spawn} = require('child_process')

router.post('/',function (req,res,next) {
  res.type('text')
  const program = spawn(
    './foo',{shell: false}
  )

  program.stdout.on('data',(data) => res.write(data))
  program.on('close',(code) => res.end())
  req.on('close',(err) => {
    program.kill(15)
  })
})

在此示例中,我想在终止进程并调用Lorem ipsum dolor sit amet,consectetur adipiscing elit. Suspendisse molestie porttitor nulla,mattis laoreet arcu ullamcorper vel. Fusce dapibus mollis dui,vel ornare nulla fermentum quis. ----- Pellentesque fringilla convallis purus,sit amet laoreet quam ornare eu. Curabitur ut ultricies urna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae ----- Proin varius laoreet blandit. Proin pulvinar a augue non volutpat. 之前流式传输以下内容

res.end()

解决方法

我为您制作了这个示例。希望对您有用:-)

const fs = require('fs')

const rs = fs.createReadStream('./lorem.txt')

let keepReading = true;

rs.on('data',data => {

  if (keepReading) {
    const lines = data.toString().split('\n');
    let selectedText = ''

    for (const line of lines) {
      if (line.includes('-----')) {
        keepReading = false;
      }
      if (keepReading) {
        if (selectedText) {
          selectedText += '\n' + line;
        } else {
          selectedText += line;
        }
      }
    }
    process.stdout.write(selectedText)
  }
})
rs.on('close',code => process.exit(code))

请注意,rs等同于您的program