2013-02-23 3 views
0
var http = require('http'); 
var fs = require('fs').createWriteStream('file1');; 

http.createServer(function(req, res) { 
    // This opens up the writeable stream to `output` 


    // This pipes the POST data to the file 
    req.pipe(fs); 

    // After all the data is saved, respond with a simple html form so they can post more data 
    req.on('end', function() { 
    res.writeHead(200, {"content-type":"text/html"}); 
    res.end('<form method="POST"><input name="test" /><input type="submit"></form>'); 
    }); 

    // This is here incase any errors occur 
    fs.on('error', function (err) { 
    console.log(err); 
    }); 
}).listen(8080); 

위의 코드에서 POST 메서드를 사용하여 HTML 양식의 입력을 받아들이고 파일의 쓰기 스트림에 파이프를 삽입하려고합니다. 그러나이를 달성 할 수는 없습니다. 다음 오류가 표시됩니다.NODEJS writeStream 오류

{ [Error: EBADF, close] errno: 9, code: 'EBADF' } 
{ [Error: EBADF, close] errno: 9, code: 'EBADF' } 
{ [Error: EBADF, close] errno: 9, code: 'EBADF' } 
{ [Error: EBADF, close] errno: 9, code: 'EBADF' } 
{ [Error: EBADF, close] errno: 9, code: 'EBADF' } 
{ [Error: EBADF, close] errno: 9, code: 'EBADF' } 
{ [Error: EBADF, close] errno: 9, code: 'EBADF' } 
{ [Error: EBADF, close] errno: 9, code: 'EBADF' } 
{ [Error: EBADF, close] errno: 9, code: 'EBADF' } 

뭐가 잘못 되었나요? 내가 POST에서 파일로 데이터를 성공적으로 리디렉션 할 수 있도록하려면 어떻게해야합니까 ?? 나는이 관련 포스트 Node.js EBADF error when writing file using writable stream

을 읽을 수는 있지만 여전히있는 방법, 나는 NODEJS의 안돼서 찾을 수 couldnt는 당신이 ...

답변

2

기본적으로 소스 스트림이 끝날 때 대상에서 end()가 호출되므로 대상에 더 이상 쓸 수 없습니다. {end : false}를 옵션으로 전달하여 대상 스트림을 열어 두십시오.

req.pipe(fs, { end: false }); 

을하고 오류가 멀리 갈 것입니다 :

당신은 간단해야한다.

1

귀하의 오류가 받았습니다 감사, 나 좀 도와주십시오 때문에 처음 이후 req.pipe(fs); 실행하는 경우 파이프가 완료되면 WriteStreamfs, 모든 req.pipe(fs);은 닫힌 FD에 쓰려고 시도한 후 EBADF이됩니다.

파이프를 사용하는 대신 WriteStream을 다시 생성하거나 req의 이벤트를 직접 사용해야합니다. 그러나 어느 쪽이든, 심각한 동시 발생 문제가 있습니다. 각 요청에 대해 별개의 파일에 대한 새로운 WriteStream을 작성해야합니다.