Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js如何停止正在运行的api_Javascript_Jquery_Node.js - Fatal编程技术网

Javascript node.js如何停止正在运行的api

Javascript node.js如何停止正在运行的api,javascript,jquery,node.js,Javascript,Jquery,Node.js,我使用“tailstream”创建了一个脚本来读取一个不断增长的文件,该脚本运行良好,代码如下所示 var http = require('http'); var tailstream = require('tailstream'); http.createServer(function(req, res) { var filename = "D:\\test.txt"; var readStream = tailstream.createReadStream(filename);

我使用“tailstream”创建了一个脚本来读取一个不断增长的文件,该脚本运行良好,代码如下所示

var http = require('http');
var tailstream = require('tailstream');

http.createServer(function(req, res) {
  var filename = "D:\\test.txt";
  var readStream = tailstream.createReadStream(filename);
  readStream.on('open', function () {    
    readStream.pipe(res);
  });
  readStream.on('error', function(err) {
    res.end(err);
  });

  setTimeout(function () {
            console.log('timeout completed'); 
            readStream.done();
        }, 10000); 

  //readStream.done();

}).listen(8080);
它工作完全正常,在setTimeout中提到的10秒后停止读取。我想这是停止从一个按钮点击用户界面。是否可以从UI传递信号并停止流媒体?任何建议都会大有帮助

非常感谢

var stopHandler = $.noop;
stopHandler = funtion(){
 //do your stuff
}

从UI调用stopHandler()

这是我的解决方案,代码没有经过测试(不确定是什么
tailstream

您应该为您的客户端实现两个功能(浏览器、UI),它们都有一个“jobId”查询字符串参数:

函数“/tail?jobId=1”启动一个
readStream
并使用一个全局变量将其缓存,“jobId”用于为每个请求的
readStream
编制索引,因为每个请求都会创建一个
readStream
对象,因此必须为每个请求“/tail”设置“jobId”唯一(时间戳或uuid)。配对调用“/stop?jobId=1”搜索给定id并获取associate
readStream
以停止它:

const http = require('http');
const url = require('url');
const tailstream = require('tailstream');

var jobs = new Map();

http.createServer(function (req, res) {
    let parsedUrl = url.parse(req.url, true);

    if (parsedUrl.pathname === '/tail') { // send stream data
        var filename = "D:\\test.txt";
        var readStream = tailstream.createReadStream(filename);
        readStream.on('open', function () {
            readStream.pipe(res);
        });
        readStream.on('error', function (err) {
            res.end(err);
        });

        jobs.set(parsedUrl.jobId, readStream);

    } else if (parsedUrl.pathname === '/stop') { // stop job
        var readStream = jobs.get(parsedUrl.jobId);
        if(readStream) {
            readStream.done();
        }
        res.end();
    }

}).listen(8080);

什么是用户界面?重定向到服务器的页面还是什么?这将在app.js中,并从html页面的$http调用。$http?请添加所有必要的信息…感谢您的及时回复。我只想检查一个问题。这在单独的脚本节点中运行时有效,但当我将此代码放入app.js中,并从ui($http({url:'/readTfile'})调用时,由于某些原因它不起作用。请有人放一些灯。这就是我所说的一个好答案;),但在用于生产之前,你应该随机化ID并添加正确的错误处理……除此之外,你最好调用“jobs.delete(jobId)”删除“done()”之后的
readStream
对象并处理错误。