2016-06-29 10 views
0

Ich erstelle eine App mit Electron. Ich musste Datei mit Socket.IO zum Server schicken, also installierte ich socket.io-stream Modul. Ich habe im Browser getestet, es funktioniert gut. Aber tun gleiche in Electron, es nicht immer mitElektron sendende Datei von socket.io-stream fehlgeschlagen mit 'TypeError: Ungültige Nicht-String/Puffer Chunk'

TypeError: Invalid non-string/buffer chunk

Dies ist Server-Seite Code:

ss(socket).on('/user/update/profile', (stream, data) => { 
    const filename = path.basename(data.name); 
    const ws = fs.createWriteStream(`userdata/profile/${filename}`); 

    stream.on('error', (e) => { 
     console.log('Error found:'); 
     console.log(e); 
    }); 
    stream.on('drain', (e) => { 
     console.log('drain'); 
    }); 
    stream.on('data',() => { 
     console.log('data'); 
    }); 
    stream.on('close',() => { 
     console.log('close'); 
    }); 
    stream.pipe(ws); 

    //ss(socket).emit('/user/update/profile', {}); 
}); 

Und das ist Client-Seite Code:

var file = ev.target.files[0]; 
var stream = ss.createStream(); 

ss(socket).emit('/user/update/profile', stream, { 
    email: this.props.user.email, 
    name: file.name, 
    size: file.size 
}); 

var blobStream = ss.createBlobReadStream(file); 
var size = 0; 
blobStream.on('data', (chunk) => { 
    size += chunk.length; 
    console.log(`${size}/${file.size}`); 
}); 
blobStream.pipe(stream); 

Code ist ziemlich einfach, nur aus dem Beispiel in der Einführungsseite des Moduls auf NPM. Ich habe bereits gesagt, dass es als Browser funktioniert. Sie sehen, dass ich jeden Upload der Dateien auf der Konsole protokolliert habe. Wenn Sie Electron verwenden, scheint das Senden der Datei zu funktionieren, da jede Datengröße protokolliert wurde, auf der Serverseite jedoch fehlgeschlagen.

Ich fand ähnliches Problem mit NW.js und dieser Typ löste sein Problem mit seinem eigenen Weg, aber das hat nicht für mich funktioniert.

Es wird sehr dankbar sein, mir helfen, wie soll ich tun.

Antwort

0

Der Fehler bedeutet, dass Sie eine Nicht-Zeichenfolge übergeben (z. B. ein Objekt), für die eine Zeichenfolge erwartet wird. Ich kann nicht sehen, wo das vielleicht ohne sein könnte, aber da es im Browser aber nicht in Electron funktioniert, könnte es sein, dass die zugrundeliegenden Javascript-Engines eine andere Toleranz für das Problem haben. Können Sie dasselbe in einem Node-Debugger ausführen? Klingt oder bricht einer der Streams merkwürdig? Kannst du eingrenzen, aus welcher Linie das kommt?