Javascript / узел: проблема с использованием метода канала из потока чтения в объект ответа http - PullRequest
1 голос
/ 24 апреля 2020

Я хотел передать содержимое текстового файла на сервер с помощью метода pipe с помощью следующего кода.

const {createServer}=require('http');
const {createReadStream}=require('fs');
let server=createServer((request,response)=>{
  response.writeHead(200,{'Content-Type':'text/plain'});
  let test=new Promise((resolve,reject)=>{
    try{let src=createReadStream('D:\\Javascript\\JavascriptPlayGround\\text.txt');}
    catch(err){reject(err);}
    resolve(src);
  })
  .then(src=>src.pipe(response)).then(xxx=>response.end('ended'))
  .catch(err=>console.log(err));
});
server.listen(8000);

Но я получаю следующую ошибку

ReferenceError: src is not defined
    at D:\Javascript\JavascriptPlayGround\server.js:10:13

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

посмотрите на ваше обещание

let test=new Promise((resolve,reject)=>{
    try{
      let src=createReadStream('D:\\Javascript\\JavascriptPlayGround\\text.txt');
    }
    catch(err){
      reject(err);
    }
    resolve(src);
  })

Вы объявляете let src внутри try блока. Когда вы покидаете блок try, значение src становится неопределенным.

Переместите resolve в блок попытки

let test=new Promise((resolve,reject)=>{
    try{
      let src=createReadStream('D:\\Javascript\\JavascriptPlayGround\\text.txt');
      resolve(src);
    }
    catch(err){
      reject(err);
    }
  })
0 голосов
/ 24 апреля 2020

src не существует в области, в которой вы пытаетесь resolve его. Также вам следует просто направить поток-файл к ответу и не вызывать end. Примерно так должно работать:

const {createServer} = require('http');
const {createReadStream} = require('fs');
let server = createServer((request, response) => {
    response.writeHead(200, {'Content-Type': 'text/plain'});    
    let test = new Promise((resolve, reject) => {            
        try {
            let src = createReadStream('D:\Javascript\JavascriptPlayGround\text.txt');
            resolve(src);
        } catch (err) {
            reject(err);
        }

    })
        .then(src => src.pipe(response))
        .catch(err => console.log(err));
});
server.listen(8000);
...