我有一个用于提供图像的休息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,想知道这是否是正确的方法?