最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

越来越node.js的应用程序有问题,从AWS S3斗拉多页(超过1000个文件)

IT培训 admin 5浏览 0评论

越来越node.js的应用程序有问题,从AWS S3斗拉多页(超过1000个文件)

我继承了一个应用程序的Node.js,我通过固定我们的问题,试图伪装自己的路。一切是伟大的工作,直到我们达到了一个AWS桶1000个文件页数限制。我在使用.eachPage()标准和异步流程,并使用.hasNextPage()进程作出努力,并一直无法得到它的工作。我感觉我的尝试,这个版本是最接近的工作。在我看来,这似乎是有道理的,但只拉第1000个文件。有人可以帮我指出正确的方向,以获得数据的这些额外的页面加载?

// Get file list from AWS s3
        s3.listObjects({
            Bucket: config.aws.s3.bucket
        }).eachPage(function(error, data, done) {
            console.log('S3 Data', data);
            done();
            if (error) {
                var err = new Error('Couldn\'t retrieve file list.');
                err.status = 404;
                return next(err);
            } else {
                return res.render('user/home', {
                    userName: user.firstName + ' ' + user.lastName,
                    dummy: (new Date()).getTime(),
                    products: util.parseProductMetaData(config.subscriptions),
                    weeks: util.parseS3FileList(user.subscriptions,
                        data.Contents,
                        config.aws.s3.worksheetFolder,
                        config.subscriptions,
                        config.aws.s3.fileRegex),
                    userHeaderContext: {
                        loggedIn: true
                    },
                    city: user.city,
                    state: user.state,
                    userFormContext: {
                        disabled: true,
                        _id: user._id,
                        email: user.email,
                        firstName: user.firstName,
                        lastName: user.lastName,
                            return val;
                        })
                    }
                });
            }
        });
回答如下:

好像你有一些冲突的JS概念在这里。当你一旦使用异步风格的三个参数,您拨打done()下一页将执行 - 因为你这样做马上,接下来的页面将立即开始执行,因此并没有真正意义稍后return东西。

你还呼吁res.render()对于文件中的每个页面,这可能不是你所预期的,为什么它看起来像只有1000个文件被列出(其实你渲染的第一个1000,然后继续做大量的工作,在后台发送后的结果!)。我建议像下面这样:

var files = [];
s3.listObjects({
  Bucket: config.aws.s3.bucket
}).eachPage(function(error, data){
  if(err) return;
  files.push(data.Contents);
});

// Now do something with all the files
res.render('whatever',files);

越来越node.js的应用程序有问题,从AWS S3斗拉多页(超过1000个文件)

我继承了一个应用程序的Node.js,我通过固定我们的问题,试图伪装自己的路。一切是伟大的工作,直到我们达到了一个AWS桶1000个文件页数限制。我在使用.eachPage()标准和异步流程,并使用.hasNextPage()进程作出努力,并一直无法得到它的工作。我感觉我的尝试,这个版本是最接近的工作。在我看来,这似乎是有道理的,但只拉第1000个文件。有人可以帮我指出正确的方向,以获得数据的这些额外的页面加载?

// Get file list from AWS s3
        s3.listObjects({
            Bucket: config.aws.s3.bucket
        }).eachPage(function(error, data, done) {
            console.log('S3 Data', data);
            done();
            if (error) {
                var err = new Error('Couldn\'t retrieve file list.');
                err.status = 404;
                return next(err);
            } else {
                return res.render('user/home', {
                    userName: user.firstName + ' ' + user.lastName,
                    dummy: (new Date()).getTime(),
                    products: util.parseProductMetaData(config.subscriptions),
                    weeks: util.parseS3FileList(user.subscriptions,
                        data.Contents,
                        config.aws.s3.worksheetFolder,
                        config.subscriptions,
                        config.aws.s3.fileRegex),
                    userHeaderContext: {
                        loggedIn: true
                    },
                    city: user.city,
                    state: user.state,
                    userFormContext: {
                        disabled: true,
                        _id: user._id,
                        email: user.email,
                        firstName: user.firstName,
                        lastName: user.lastName,
                            return val;
                        })
                    }
                });
            }
        });
回答如下:

好像你有一些冲突的JS概念在这里。当你一旦使用异步风格的三个参数,您拨打done()下一页将执行 - 因为你这样做马上,接下来的页面将立即开始执行,因此并没有真正意义稍后return东西。

你还呼吁res.render()对于文件中的每个页面,这可能不是你所预期的,为什么它看起来像只有1000个文件被列出(其实你渲染的第一个1000,然后继续做大量的工作,在后台发送后的结果!)。我建议像下面这样:

var files = [];
s3.listObjects({
  Bucket: config.aws.s3.bucket
}).eachPage(function(error, data){
  if(err) return;
  files.push(data.Contents);
});

// Now do something with all the files
res.render('whatever',files);
发布评论

评论列表 (0)

  1. 暂无评论