Express2.5.8とmongoose2.7.0を使用しています。これが私のドキュメントスキーマです。このコレクションは、トランザクションに関連付けられたファイル(具体的にはコンテンツ文字列)を保存する場所です。
var documentsSchema = new Schema({
name : String,
type : String,
content : String,
uploadDate : {type: Date, default: Date.now}
});
そして、これが私のトランザクションスキーマの一部です。
var transactionSchema = new Schema({
txId : ObjectId,
txStatus : {type: String, index: true, default: "started"},
documents : [{type: ObjectId, ref: 'Document'}]
});
そして、ドキュメントをトランザクションに保存するために使用しているエクスプレス関数は次のとおりです。
function uploadFile(req, res){
var file = req.files.file;
console.log(file.path);
if(file.type != 'application/pdf'){
res.render('./tx/application/uploadResult', {result: 'File must be pdf'});
} else if(file.size > 1024 * 1024) {
res.render('./tx/application/uploadResult', {result: 'File is too big'});
} else{
var document = new Document();
document.name = file.name;
document.type = file.type;
document.content = fs.readFile(file.path, function(err, data){
document.save(function(err, document){
if(err) throw err;
Transaction.findById(req.body.ltxId, function(err, tx){
tx.documents.push(document._id);
tx.save(function(err, tx){
res.render('./tx/application/uploadResult', {result: 'ok', fileId: document._id});
});
});
});
});
}
}
トランザクションは問題なく作成されます。そして、ドキュメントレコードが作成され、コンテンツ以外のすべてが設定されます。
コンテンツが設定されないのはなぜですか?fs.readFileは、問題なくファイルをバッファとして返します。