2016-06-29 4 views
0

전자로 앱을 만들고 있습니다. Socket.IO로 서버에 파일을 보내야했기 때문에 socket.io-stream 모듈을 설치했습니다. 나는 브라우저에서 테스트 했으므로 잘 작동한다. 그러나 전자에서 동일한 작업을 수행, 항상'TypeError : String/buffer chunk가 유효하지 않습니다.'라는 메시지가 socket.io-stream에 의한 전자 전송에 실패했습니다.

TypeError: Invalid non-string/buffer chunk

으로 이것은 서버 측 코드 실패

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', {}); 
}); 

을 그리고 이것은 클라이언트 측 코드입니다 :

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); 

코드, 그냥 매우 간단합니다 NPM의 모듈 소개 페이지에있는 예제를 참조하십시오. 이미 브라우저로 작동한다고했습니다. 콘솔에 모든 파일 업로드 진행 상황을 기록한 것을 볼 수 있습니다. 일렉트론을 사용하면 파일 보내기는 모든 데이터 크기를 기록하기 때문에 작동하지만 서버 쪽에서는 실패합니다.

NW.js와 비슷한 문제가 발견되어 그 사람이 자신의 문제를 해결했지만 저에게는 효과가 없었습니다.

내가 어떻게해야하는지 정말 고맙게 생각합니다.

답변

0

오류는 사용자가 문자열이 아닌 문자열 (예 : 개체)을 전달하고 있음을 의미합니다. 나는 그것이 어디에서 벗어날 수 있는지 알 수는 없지만, 브라우저에서는 작동하지만 전자 기기에서는 작동하지 않기 때문에 기본 자바 스크립트 엔진이 문제에 대해 다른 허용 오차를 가질 수 있습니다. 노드 디버거에서 같은 것을 실행할 수 있습니까? 스트림 중 하나가 이상하게 불만을 나타내거나 중단됩니까? 이 라인이 어느 라인에서 좁혀 질 수 있습니까?