nodejs アプリケーションで gridfs-stream を使用したいと考えています。
ドキュメントに簡単な例が示されています。
var mongoose = require('mongoose');
var Grid = require('gridfs-stream');
Grid.mongo = mongoose.mongo;
mongoose.connect('mongodb://localhost:27017/test');
// make sure the db instance is open before passing into `Grid`
mongoose.connection.once('open', function () {
var gfs = Grid(mongoose.connection);
// all set!
})
私の問題はコメントで説明されています:
渡す前にdbインスタンスが開いていることを確認してください
Grid
gfs
投稿リクエストで使用しようとしています。コードが初期化されるとき、gfs
変数はまだ定義されていません。
api.post('/upload', function(req, res) {
req.pipe(gfs.createWriteStream({
filename: 'test'
}).on('close', function(savedFile){
console.log('file saved', savedFile);
return res.json({file: savedFile});
}));
})
コールバックからルートを初期化するのはちょっと奇妙に思えます。この投稿 ( Node.js モジュールの非同期初期化) で、require('') が同期的に実行されることを読みました。
基本的に、起動時に非同期パターンを使用する必要があるのか 、それともこれを解決するためのよりエレガントな方法を見逃しているのかわかりません。