在Node.js AWS SDK中configuration区域

有人可以解释如何解决与Node.js丢失的configuration错误? 我已经遵循aws doc页面的所有例子,但是无论如何,我仍然会得到这个错误。

{ [ConfigError: Missing region in config] message: 'Missing region in config', code: 'ConfigError', time: Wed Jun 24 2015 21:39:58 GMT-0400 (EDT) }>{ thumbnail: { fieldname: 'thumbnail', originalname: 'testDoc.pdf', name: 'testDoc.pdf', encoding: '7bit', mimetype: 'application/pdf', path: 'uploads/testDoc.pdf', extension: 'pdf', size: 24, truncated: false, buffer: null } } POST / 200 81.530 ms - - 

这是我的代码:

 var express = require('express'); var router = express.Router(); var AWS = require('aws-sdk'); var dd = new AWS.DynamoDB(); var s3 = new AWS.S3(); var bucketName = 'my-bucket'; AWS.config.update({region:'us-east-1'}); (...) 

如何改变陈述的顺序? 在实例化s3和dd之前更新AWSconfiguration

 var AWS = require('aws-sdk'); AWS.config.update({region:'us-east-1'}); var dd = new AWS.DynamoDB(); var s3 = new AWS.S3(); 

我有同样的问题“在configuration丢失区域”,在我的情况是这样的,不像在CLI或Python SDK中,Node SDK不会从~\.aws\config文件中读取。

要解决这个问题,你有三个select:

  1. 以编程方式configuration(硬编码): AWS.config.update({region:'your-region'});

  2. 使用一个环境variables。 CLI使用AWS_DEFAULT_REGION ,Node SDK使用AWS_REGION

  3. 使用AWS.config.loadFromPath('./config.json');从JSON文件中加载

JSON格式:

 { "accessKeyId": "akid", "secretAccessKey": "secret", "region": "us-east-1" } 

您可以在创builddynamodb连接时指定区域(尚未尝试s3,但也应该可以)。

 var AWS = require('aws-sdk'); var dd = new AWS.DynamoDB({'region': 'us-east-1'}); 

这可能不是正确的方法,但我有我的所有configuration在一个单独的JSON文件。 这确实解决了我的问题

要加载AWSconfiguration,我这样做:

 var awsConfig = config.aws; AWS.config.region = awsConfig.region; AWS.config.credentials = { accessKeyId: awsConfig.accessKeyId, secretAccessKey: awsConfig.secretAccessKey } 

config.aws只是一个JSON文件。

对我来说同样的错误:

经过大量的试验
我已经解决了以下问题:

  1. 只在本地系统中设置AWS_REGION环境variables,us-east-1(示例)
  2. 现在,不需要为区域设置任何lambdavariables
  3. 另外,不需要在代码中使用,例如:

    AWS.config.update(…)这不是必需的
    AWS.XYZ()这将工作没有任何问题XYZ是像S3或其他任何aws服务

[[在极less数情况下]]如果代码中假设某些默认值,并且您被迫发送区域,则使用{'region':process.env.AWS_REGION})

 var AWS = require('aws-sdk'); 

//以下列方式在这里分配AWS凭证:

 AWS.config.update({ accessKeyId: 'asdjsadkskdskskdk', secretAccessKey: 'sdsadsissdiidicdsi', region: 'us-east-1' }); var dd = new AWS.DynamoDB(); var s3 = new AWS.S3(); 

如果您使用AWS CLI,则可能在〜/ .aws / config中定义了一个默认区域。 不幸的是,AWS SDK for JavaScript默认不加载它。 要加载它,请定义env var

 AWS_SDK_LOAD_CONFIG=1 

请参阅https://github.com/aws/aws-sdk-js/pull/1391

您可以创build一个通用模块,并根据您想要的区域来使用它

 var AWS = require('aws-sdk') module.exports = { getClient: function(region) { AWS.config.update({ region: region }) return new AWS.S3() } } 

并消耗它,

  var s3Client = s3.getClient(config.region) 

这个想法是在实例化s3之前更新AWSconfiguration