2016-08-15 3 views
3

official document에 따르면, createReadStream경로 인수로 버퍼 유형을 수용 할 수 createReadStream을 할당합니다.어떻게 버퍼가

그러나 많은 Q & A는 단지 문자열하지 버퍼에 의해 인수를 보내는 방법의 솔루션을 제공합니다.

은 어떻게 경로 createReadStream에 맞게 적절히 버퍼 인수를 설정합니까?

fs.access(filePath, (err: NodeJS.ErrnoException) => { 
    // Response with 404 
    if (Boolean(err)) { res.writeHead(404); res.end('Page not Found!'); return; } 

    // Create read stream accord to cache or path 
    let hadCached = Boolean(cache[filePath]); 
    if (hadCached) console.log(cache[filePath].content) 
    let readStream = hadCached 
     ? fs.createReadStream(cache[filePath].content, { encoding: 'utf8' }) 
     : fs.createReadStream(filePath); 
    readStream.once('open',() => { 
     let headers = { 'Content-type': mimeTypes[path.extname(lookup)] }; 
     res.writeHead(200, headers); 
     readStream.pipe(res); 
    }).once('error', (err) => { 
     console.log(err); 
     res.writeHead(500); 
     res.end('Server Error!'); 
    }); 

    // Suppose it hadn't cache, there is a `data` listener to store the buffer in cache 
    if (!hadCached) { 
     fs.stat(filePath, (err, stats) => { 
      let bufferOffset = 0; 
      cache[filePath] = { content: Buffer.alloc(stats.size, undefined, 'utf8') }; // Deprecated: new Buffer 

      readStream.on('data', function(chunk: Buffer) { 
       chunk.copy(cache[filePath].content, bufferOffset); 
       bufferOffset += chunk.length; 
       //console.log(cache[filePath].content) 
      }); 
     }); 
    } 
}); 

```

답변

3

사용 inbuild stream 라이브러리에서 PassThrough 방법 :

const stream = require("stream"); 

let readStream = new stream.PassThrough(); 
readStream.end(new Buffer('Test data.')); 

// You now have the stream in readStream 
readStream.once("open",() => { 
    // etc 
}); 

내 코드입니다