0

我正在构建一个虚拟图像生成器来提高我对 Node 和 Express 的理解。我从 URL 中获取尺寸并使用 GM 包来调整它的大小。生成的流通过管道传输到响应中。但是我没有在前端获取数据,当我在 Chrome 的开发工具的网络面板中检查响应选项卡时,我看到“此响应没有可用数据”。有人可以给我一些指示,因为我不确定我可以从哪里开始调试它。

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);
  });
};

我收到的响应标头如下所示: 在此处输入图像描述

4

1 回答 1

0

原来我忘记将ImageMagick添加为gm的依赖项,这导致了错误。奇怪的是,控制台中没有显示该错误,我只是在将应用程序分解成更简单的部分并按照上面评论中提到的裙子进行调试后才发现它。

为了解决这个问题,我做了以下事情:

npm install --save imagemagick

然后在我使用 gm 包的文件中,我设置了 imageMagick 属性:

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

注意:我在 Windows 7 上运行它。

于 2017-10-10T19:13:19.493 回答