画像がインデックスに複数回表示されるという奇妙な問題がありますが、パーマリンク ビューでは投稿ごとに正しい一連の画像が表示されます。
私はこのコントローラーを使用しています。/grid/:id
exports.getById = function(req, res){
id = req.params.id;
var conn = mongoose.createConnection(res.locals.db);
conn.once('open', function(){
var gfs = Grid(conn.db, mongoose.mongo);
gfs.files.find({ _id: ObjectID(id) }).toArray(function(err, files){
if (err) throw new Error(err);
// console.log(files);
res.set('Content-Type', files[0].contentType);
});
var readstream = gfs.createReadStream({ _id: id });
readstream.pipe(res);
});
};
スクリーンショットは、何が起こっているのかを説明する最も簡単な方法です。
現在レンダリング中のインデックスは次のとおり です (ここには 2 つの異なるリンクがありますが、同じ画像が表示されていることに注意してください) 。
Web Inspector の最初の画像の検査は次のとおりです。
詳しく調べると…
ただし、その投稿のパーマリンク ページに移動すると、ランダムに正しい画像が表示されるか、同じ画像が再度表示されます。ただし、最初の画像をアドレスバーにドラッグしてから戻すと、正しい画像が再び表示されます。
リフレッシュするまで…
私の最初の推測では、間違った を送信していたContentType
のですが、コードはそれをres.set('ContentType', files[0].contentType)
;で送信します。これは機能しますが、手動で設定して'image/png'
も修正されません。
標準ドライバーを使用するための2番目のコントローラーも作成しましたmongodb
が、まったく同じエラーが発生します。
var mongo = require('mongodb');
var Grid = require('gridfs-stream');
var ObjectID = require('mongodb').ObjectID;
exports.mongoGet = function(req, res){
id = req.params.id;
var db = new mongo.Db('database', new mongo.Server("127.0.0.1", 27017), {safe: true});
db.open(function (err){
if (err) throw new Error(err);
var gfs = Grid(db, mongo);
var readstream = gfs.createReadStream({ _id: ObjectID(id) });
res.set('Content-Type', 'image/png');
readstream.pipe(res);
});
};
これは私を巨大なループに追いやっています。どんな助けでも大歓迎です!