Javascript 如何解决binary.js(BinaryStream.write)的节点服务器上的流不可写的问题?
我在文件上传节点服务器上工作,对于上传后的一个大文件,我得到以下错误 错误:流不可写Javascript 如何解决binary.js(BinaryStream.write)的节点服务器上的流不可写的问题?,javascript,node.js,websocket,binary.js,Javascript,Node.js,Websocket,Binary.js,我在文件上传节点服务器上工作,对于上传后的一个大文件,我得到以下错误 错误:流不可写 在BinaryStream.write(/node_modules/binaryjs/lib/stream.js:84:11) at/src/K/Cli/upload/lib/media.js:120:36 在ChildProcess.exithandler(child_process.js:742:7) 在ChildProcess.emit(events.js:110:17) 在maybeClose(chil
在BinaryStream.write(/node_modules/binaryjs/lib/stream.js:84:11)
at/src/K/Cli/upload/lib/media.js:120:36
在ChildProcess.exithandler(child_process.js:742:7)
在ChildProcess.emit(events.js:110:17)
在maybeClose(child_process.js:1015:16)
在Process.ChildProcess.\u handle.onexit(child\u Process.js:1087:5) 我正在使用节点
版本v0.10.48
从中选取的参考代码
我找不到解决这个问题的方法
问题是1%的情况下,代码转到console.log('Debug 4)
case,执行stream.write({end:true})代码>它停止节点服务器,即,我得到坏网关,因为抛出的错误没有得到处理
在前端,我使用来自节点服务器的数据读取内容id并设置完成,但由于节点服务器停止,我无法从节点服务器获取内容id
bs = new BinaryServer({ port: 9004 });
bs.on('connection', function (client) {
client.on('stream', function (stream, meta) {
upload(stream, meta);
});
});
function upload(stream, meta) {
var file = fs.createWriteStream(uploadPath + '/' + meta.name);
stream.pipe(file);
stream.on('end', function () {
// console.log(__dirname);
var cli_base=__dirname+'/../../';
var cmd = '<upload systme cmd>';
console.log('Uploading End and running command ' + cmd);
try {
stream.write({uploaded: true});
}catch (e) {
console.log('Debug 3, Streem On End Event : '+e.message,meta);
// stream.write({end: true});
}
if(!meta.hasOwnProperty('executed')){
meta.executed=true;
child = exec(cmd, function (error, stdout, stderr) {
try{
console.log(error, JSON.parse(stdout), stderr);
var command_output = JSON.parse(stdout);
if(command_output.hasOwnProperty('content_id')){
stream.write({end: true, content_id: command_output.content_id,files:command_output.file});
console.log(command_output.content_id);
}
}catch (e) {
console.log('Debug 4, Streem On End Event : '+e.message,meta,child);
stream.write({end: true});
}
});
}
});
}
bs=newbinaryserver({port:9004});
bs.on(‘连接’、功能(客户端){
client.on('stream',函数(stream,meta){
上传(流、元);
});
});
功能上传(流、元){
var file=fs.createWriteStream(上传路径+'/'+meta.name);
stream.pipe(文件);
stream.on('end',function(){
//console.log(uu dirname);
var cli_base=uu dirname+'/../../../';
var cmd='';
console.log('upload End and running command'+cmd);
试一试{
stream.write({upload:true});
}捕获(e){
log('Debug 3,Streem On End Event:'+e.message,meta);
//stream.write({end:true});
}
如果(!meta.hasOwnProperty('executed')){
meta.executed=true;
child=exec(cmd,function(error,stdout,stderr){
试一试{
log(错误,JSON.parse(stdout),stderr);
var command_output=JSON.parse(stdout);
if(command\u output.hasOwnProperty('content\u id')){
write({end:true,content\u id:command\u output.content\u id,files:command\u output.file});
日志(命令输出内容id);
}
}第(e)款{
log('Debug 4,Streem On End Event:'+e.message,meta,child);
stream.write({end:true});
}
});
}
});
}
我找到了解决您问题的方法,请在创建文件对象时使用选项,如下所示
var options = {flags: 'w', encoding: 'utf8',fd: null,mode: '0666'};
var file = fs.createWriteStream(uploadPath + '/' + meta.name,options);
节点引用
createWriteStream的编码选项
此问题可能是由于使用了节点版本!!请检查您的节点版本并添加您的问题。@Muneeralm我使用节点版本v0.10.48
,并更新了相同的问题。@Ramrantan Gupta问题可以解决,如果您可以更新节点版本(>0.12.X)或某些LTS版本。