2013-05-02 112 views
1

Im使用jqgrid插入數據。這些數據還包括圖像。上傳沒有問題,但Im很難將數據和重命名文件組合起來,以便將其保存到數據庫中。我試圖用控制檯檢查它,看起來像我的系統嘗試調用插入模型兩次。這是輸出:NodeJS:保存重命名上傳的圖像到數據庫

console.log (content.record); 

{ 
id: '_empty', 
Logo: undefined, 
Name: 'foo' 
} 
{ 
id: 'undefined', 
Logo: 'public/foo.jpeg',  
Name: 'undefined' 
} 

//它總是試圖插入兩次。也許是因爲(...);

這是我的代碼重命名上傳的文件並將其保存到與包括數據的數據庫..

exports.Upload = function(req,res){ 



     for(var i in req.files) 
      var tmp_path = req.files[i].path; 
     for(var i in req.files) 
     var target_path = newpath + req.files[i].name; 

       fs.rename(tmp_path, target_path, function(err) { 
       fs.unlink(tmp_path, function() { 

        var content = {}; 
        content.table = "teams"; 
        content.record = {id:req.body.id,Logo:target_path,Name:req.body.Name}; 


        //console.log(target_path); 
       console.log(content.record); 

         req.model.insert(content,function(err,result){ 
         result = (result?true:false); 

         }); 
        }); 
      }); 
}; 

請及時與我的英語不好, 任何幫助熊將不勝感激。

回答

0

執行異步操作時,不要使用標準for循環。使用異步模塊,而不是與async.eachSeries

var inspect = require('eyespect').inspector(); 
var fs = require('fs') 
var path = require('path') 
var async = require('async') 
exports.Upload = function (req, res) { 
    var files = req.files 
    async.eachSeries(
    files, 
    function (file, cb) { 
     var filePath = file.path 
     var filename = file.filename 
     var outputPath = path.join(__dirname, 'uploads/', filename) 
     fs.rename(filePath, outputPath, function (err, reply) { 
     if (err) { return cb(err) } 
     var content = {}; 
     content.table = "teams"; 
     content.record = { 
      id:req.body.id, 
      logo:outputPath, 
      name: 
      req.body.Name 
     }; 
     //console.log(target_path); 
     console.log(content.record); 
     req.model.insert(content,function(err,result){ 
      if (err) { return cb(err) } 
      inspect(result, 'insert result') 
      cb() 
     }) 
     }) 
    }, 
    function (err) { 
     if (err) { 
     inspect(err, 'error saving files to database') 
     res.send(500, err) 
     return 
     } 
     res.send(200, 'files saved correctly') 
    }) 
} 

要安裝的例子中所需的依賴上述執行 npm install -S eyespect async

相關問題