2017-10-07 14 views
0

노드 및 익스프레스에 대한 이해를 높이기 위해 더미 이미지 생성기를 구축 중입니다. URL에서 크기를 가져 와서 GM 패키지를 사용하여 크기를 조정합니다. 결과 스트림은 응답으로 파이프됩니다. 하지만 프런트 엔드에서 데이터를 가져 오지 못하고 Chrome의 네트워크 도구 패널에있는 응답 패널에서 '이 응답에 데이터가 없습니다'라는 메시지가 표시됩니다. 누군가 디버깅을 시작할 수 있는지 확실하지 않기 때문에 누군가 포인터를 제공 할 수 있습니까? 'Content-Length : 0'에 응답 설정 응답 헤더를 표시하고 응답 없음 데이터가있는 파이프 크기가 ​​조정 된 이미지

const IMAGE_DIR_PATH = path.join(__dirname, './../../data/images'); 

const getRandomImageName =() => { 
    return new Promise((resolve, reject) => { 
    fs.readdir(IMAGE_DIR_PATH, (err, images) => { 
     err ? reject(err) : resolve(
     images[Math.floor(Math.random() * images.length)] 
    ); 
    }); 
    }); 
}; 

const pickDimensions = (dimensionsStr) => { 
    const dimensions = dimensionsStr.toLowerCase().split('x'); 
    return { 
    width: dimensions[0], 
    height: dimensions[1] ? dimensions[1] : dimensions[0] 
    }; 
}; 

exports.getRandomImageByDimension = (req, res, next) => { 
    const dimensions = pickDimensions(req.params.dimensions); 

    //getRandomImageName returns a Promise 
    //resolves with the name of the file example: abc.jpg 
    getRandomImageName() 
    .then((img) => { 
    res.set('Content-Type', 'image/jpeg'); 

    //I am getting the right image and the path below is valid 
    gm(path.resolve(`${IMAGE_DIR_PATH}/${img}`)) 
    .resize(dimensions.width, dimensions.height) 
    .stream(function (err, stdout, stderr) { 
     if (err) { throw new Error(err); } 
     stdout.pipe(res); 
    }); 
    }) 
    .catch(e => { 
    res.status(500); 
    res.send(e); 
    }); 
}; 

내가받는 응답 헤더

는 다음과 같습니다 : enter image description here

+1

훨씬 간단한 예제를 사용하여 디버깅을 시작할 수 있습니다. 먼저 익스프레스 나 GM을 사용하지 않는 노드 스크립트를 만들고 이미지 파일을 열고 다른 파일로 파이프하여 하드 코딩 된 파일 이름을 사용하여 작동하는지 확인하십시오. 그런 다음 하드 코딩 된 크기를 사용하여 크기 조정 항목을 추가하고 작동하는지 확인하십시오. 그런 다음 점진적으로 Express 비트를 도입하고 하드 코딩을 제거하십시오. 계속해서 각 단계에서 문제가되는 부분을 정확히 파악할 때까지 계속 점검하십시오. – skirtle

답변

0

내가 gm에 대한 종속성으로 ImageMagick을 추가 잊고 있었던이 오류를 일으키는 것으로 밝혀졌습니다. 이상하게도 콘솔에 오류가 표시되지 않았고 위의 설명에서 언급 한 것처럼 간단한 응용 프로그램으로 디버깅하고 디버깅을 한 후에 만 ​​발견했습니다.

나는 다음과 같은 한 수정하려면 :

const gm = require('gm').subClass({imageMagick: true}); 

주 : 그럼 난 GM의 패키지를 사용하던 파일에, 나는 ImageMagick이 속성을 설정

npm install --save imagemagick 

내가 이것에 실행중인 Windows 7.