Node.JS Sharp库-结束后写入错误

里奇沃尔

我有以下代码:

var express = require('express');
var request = require('request');
var sharp = require('sharp');
var app = express();

var transformer = sharp()
        .resize(100, 100)
        .crop(sharp.gravity.north)
        .on('error', function(err) {
                console.log('ERR');
                console.log(err);
        });


app.get('/test', function(req, res) {
        var url = 'http://i.ytimg.com/vi/tntOCGkgt98/maxresdefault.jpg';
        request(url).pipe(transformer).pipe(res);
});

var server = app.listen(3000, function() {
        var host = server.address().address;
        var port = server.address().port;
        console.log('Listening at http://%s:%s', host, port);
});

我第一次运行它时效果很好。第二次运行它时,我得到[错误:结束后写],该错误在转换器流的on('error')中发出。

如果我只是做

request(url).pipe(res);

它工作正常,因此仅当包含.pipe(transformer)位时才有效。

有什么想法我做错了吗?

尼克·马金(Nik Markin)

创建双工(可读和可写)流(变压器),并且该流可用于不同的可读流(请求)。当您通过管道传输到转换器流时,它会关闭,稍后您尝试再次通过管道传输到相同的已关闭流。

var transformer = sharp();
var stream = require('stream');

// transformer is a stream
console.log("transformer instanceof stream.Duplex - ", transformer instanceof stream.Duplex); // true


// just a simple streams example
var readable = new stream.Readable();
var writable = new stream.Writable();

readable.push("data");
readable.push(null);

writable._write = function (chunk, encoding, done) {
  console.log("Writable stream received data: ", chunk.toString());
  done();
};

var _saved_original_end_method = writable.end;
// redefining end method just to see if it's executed
writable.end = function () {
  console.log("Ending writable stream");

  _saved_original_end_method.apply(this, arguments);
};

// first piping finished successfully
readable.pipe(writable);

var anotherReadableStream = new stream.Readable();

setTimeout(function () {
  // this will cause an exception
  anotherReadableStream.push("another data sample");
  anotherReadableStream.push(null);
  anotherReadableStream.pipe(writable);
}, 1000);

结果:

transformer instanceof stream.Duplex -  true
Writable stream received data:  data
Ending writable stream
events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: write after end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Node.js“结束后写入”错误

来自分类Dev

Node.js结束错误后写入zlib

来自分类Dev

Node.js Http 写入结束后

来自分类Dev

Node.js Web服务器中的结束后写入错误

来自分类Dev

Express,csvtojson和node-walk的“结束后写入”错误

来自分类Dev

Node.js:写入后关闭文件

来自分类Dev

在node.js中测试后清理数据库

来自分类Dev

在node.js中测试后清理数据库

来自分类Dev

Node js写入文件

来自分类Dev

循环结束后在Node.js中执行条件语句

来自分类Dev

在结束错误后写入

来自分类Dev

适用于Node.js的MySQL库中的错误

来自分类Dev

Mac:Node JS Mongo数据库错误:连接被拒绝

来自分类Dev

Mac:Node JS Mongo数据库错误:连接被拒绝

来自分类Dev

适用于Node.js的MySQL库中的错误

来自分类Dev

Node.Js,JSON解析错误,输入意外结束

来自分类Dev

Node.Js,JSON解析错误,输入意外结束

来自分类Dev

Node.js:Sharp软件包无法安装

来自分类Dev

错误:使用Node.js写入文件时出现EACCES

来自分类Dev

node.js服务器句柄请求回调函数在写入响应之前结束

来自分类Dev

没有Node.js的Node.js库

来自分类Dev

容器Node.js(Express)后出现“ ECONNREFUSED”错误

来自分类Dev

node.js-执行错误命令后清空文件

来自分类Dev

升级 Ubuntu 后现在会出现 Node.js 错误

来自分类Dev

node.js:将数据插入PostgreSQL数据库时,提交后HTML表单挂起

来自分类Dev

从流导入到数据库后,node.js如何同步最终回调

来自分类Dev

node.js&在异步数据库搜索后表达,重定向或发送文件

来自分类Dev

如何确保Node.js函数仅在流结束后才运行?

来自分类Dev

结束后将node.js中exec的输出发送给邮递员

Related 相关文章

热门标签

归档