노드 및 익스프레스에 대한 이해를 높이기 위해 더미 이미지 생성기를 구축 중입니다. 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);
});
};
내가받는 응답 헤더
는 다음과 같습니다 :
훨씬 간단한 예제를 사용하여 디버깅을 시작할 수 있습니다. 먼저 익스프레스 나 GM을 사용하지 않는 노드 스크립트를 만들고 이미지 파일을 열고 다른 파일로 파이프하여 하드 코딩 된 파일 이름을 사용하여 작동하는지 확인하십시오. 그런 다음 하드 코딩 된 크기를 사용하여 크기 조정 항목을 추가하고 작동하는지 확인하십시오. 그런 다음 점진적으로 Express 비트를 도입하고 하드 코딩을 제거하십시오. 계속해서 각 단계에서 문제가되는 부분을 정확히 파악할 때까지 계속 점검하십시오. – skirtle