2013-05-02 120 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

相关问题