使用Node.js Nano模块上传到CouchDB的批量上传附件



我正在尝试使用node.js和nano将附件上传到couchdb。首先,漫步模块用于在上传文件夹中查找所有文件,并从中创建数组。接下来,应该将来自数组的每个文件通过管道和纳米模块插入couchdb。但是,最终结果是仅上传了一个附件。

var nano = require('nano')('http://localhost:5984')
var alice = nano.use('alice');
var fs = require('fs');
var walk = require('walk');
var files = [];
// Walker options
var walker = walk.walk('./uploads', {
    followLinks: false
});
// find all files and add to array
walker.on('file', function (root, stat, next) {
    files.push(root + '/' + stat.name);
    next();
});
walker.on('end', function () {
    // files array ["./uploads/2.jpg","./uploads/3.jpg","./uploads/1.jpg"]
    files.forEach(function (file) {
        //extract file name
        fname = file.split("/")[2]
        alice.get('rabbit', {revs_info: true}, function (err, body) {
                fs.createReadStream(file).pipe(
                    alice.attachment.insert('rabbit', fname, null, 'image/jpeg', {
                        rev: body._rev
                    }, function (err, body) {
                        if (!err) console.log(body);
                    })

                )

        });

    });

});

这是因为您将异步API混合在一起,假设该API是同步的。

在第一个请求后,您会发生冲突,因为兔子文件已更改。

您可以使用 NANO_ENV=testing node yourapp.js确认这一点?

我建议使用async如果这是问题

var nano = require('nano')('http://localhost:5984')
var alice = nano.use('alice');
var fs = require('fs');
var walk = require('walk');
var files = [];
// Walker options
var walker = walk.walk('./uploads', {
    followLinks: false
});
walker.on('file', function (root, stat, next) {
    files.push(root + '/' + stat.name);
    next();
});
walker.on('end', function () {
    series(files.shift());
});

function async(arg, callback) {
    setTimeout(function () {callback(arg); }, 100);
}

function final() {console.log('Done');}

function series(item) {
    if (item) { 
        async(item, function (result) {
            fname = item.split("/")[2]
            alice.get('rabbit', { revs_info: true }, function (err, body) {
                if (!err) {
                    fs.createReadStream(item).pipe(
                    alice.attachment.insert('rabbit', fname, null, 'image/jpeg', {
                        rev: body._rev
                    }, function (err, body) {
                        if (!err) console.log(body);
                    })

                    )
                }
            });
            return series(files.shift());
        });
    } 
    else {
        return final();
    }
}

相关内容

  • 没有找到相关文章

最新更新