nodejs在1次调用S3 / SQS后停止响应

时间:2013-08-18 19:27:05

标签: node.js amazon-web-services express

我使用aws-sdk模块在nodejs / expressjs中执行一个简单的过程:

  1. 上传文件(使用浏览器表单帖子)
  2. 将其发送至AWS S3
  3. 在AWS SQS中发送消息以进行进一步处理。
  4. 使用SQS返回对象响应客户端。
  5. 下面的代码完美无缺,但只有一次。在文件的第一篇文章之后,节点应用程序不再响应其他帖子或操作(它甚至会停止我使用SetInterval运行的任何进程(方法,10000)。当我尝试发布第二个文件时,它只是挂起。如果我重新启动服务器它只适用于一个帖子。我在WebStorm 5 IDE中运行nodejs-v0.10.9。客户端在文件发布后路由到的代码如下:queueXml:

    var fs = require('fs');
    var step = require('step');
    var AWS = require('aws-sdk');
    AWS.config.loadFromPath('./lib/aws/config.json');
    
    var bucketName = 'xxxxxx';
    var sqsEndPoint = 'http://xxxx';
    
    exports.queueXml = function(req,res){
      var key = getGuid();
      step(
        function readPostedFile(){
            fs.readFile(req.files.postedfile.path, this);
        },
        function sendToS3(err, data){
            if(err) throw err;
    
            var s3Bucket = new AWS.S3({params:{Bucket: bucketName}});
            var fileData = {Bucket: bucketName, Key: key, Body: data};
            s3Bucket.putObject(fileData,this);
        },
        function sendSQSMessage(err, path){
            if(err) throw err;
    
            var sqs = new AWS.SQS();
            var message = {Bucket:bucketName, Key:key};
            sqs.sendMessage({QueueUrl:sqsEndPoint,MessageBody:JSON.stringify(message)},this);
        },
        function end(err, data){
            if(err) throw err;
    
            res.send(JSON.stringify(data));
        }
    
      )
    
    }
    

0 个答案:

没有答案