需要使用Node Express rest api返回304图像

时间:2018-03-30 17:18:40

标签: node.js express download http-status-code-304

我有一个用于提供图像的休息API。每个网址将始终返回相同的文件,例如:https://example.com/rest/file/organisation/table/1234.jpg。但是实际文件不在www文件系统下。结果表明,express总是以200状态重新发送文件。

第一次下载图像后如何让Express返回304?

以下是我使用的快捷代码:

router.get('/file/:organisation/:table/:filename', function (req, res, next) {
  db.resolveTableName( req )
  .then( table => {
      const pathname = path.resolve( MediaPath ) + '/' + req.params.organisation + '/'
        + req.params.table + '/' + req.params.filename;

      // Get the filetype
      readChunk( pathname, 0, 4100 )
      .then( buffer => {
        var mimetype = fileType( buffer ).mime;
        if( mimetype === 'image/jpeg' ) {
          var s = fs.createReadStream( pathname );
          s.on('open', function () {
            res.set('Content-Type', mimetype);
            s.pipe(res);
          });
          s.on('error', function () {
            res.set('Content-Type', 'text/plain');
            res.status(404).end('Not found');
          });
        } else {
          res.status(500).json( 'Invalid file type' );
        }
      })
      .catch( err => {
        res.status(500).json( 'Error on ' + req.params.filename );
      });
  })
  .catch( err => {
    res.status(401).json('Unauthorized');;
  });
});

我看过这里:https://developer.mozilla.org/en-US/docs/Web/HTTP/Conditional_requests#Principles,想知道这是否是正确的方法?

0 个答案:

没有答案