![](/img/trans.png)
[英]NodeJS API with DynamoDB - Missing region in config but it is set
[英]Missing region in config while trying to run Chai on local DynamoDB with Dynamoose
我正在使用Restify,并且试图学习如何编写测试CRUD方法的方法。 连接到DynamoDB时,我可以在Postman上测试它们,而不会出现任何问题。 为了进行测试,我将连接到运行在localhost:8000上的本地DynamoDB。
在server.listen
,我有这个:
dynamoose.AWS.config.update({
accessKeyId: config.db.aws_access_key_id,
secretAccessKey: config.db.aws_secret_access_key,
region: config.db.aws_region
});
if (config.env == "test") {
dynamoose.local();
}
(我也尝试在更新之前调用dynamoose.local()
)
使用mocha --timeout 10000
命令运行测试时,出现以下错误:
1) Uncaught error outside test suite:
Uncaught ConfigError: Missing region in config
at Request.VALIDATE_REGION (node_modules/aws-sdk/lib/event_listeners.js:91:45)
at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:105:20)
at callNextListener (node_modules/aws-sdk/lib/sequential_executor.js:95:12)
at /Users/username/Development/projectname-api/node_modules/aws-sdk/lib/event_listeners.js:85:9
at finish (node_modules/aws-sdk/lib/config.js:320:7)
at /Users/username/Development/projectname-api/node_modules/aws-sdk/lib/config.js:338:9
at SharedIniFileCredentials.get (node_modules/aws-sdk/lib/credentials.js:126:7)
at getAsyncCredentials (node_modules/aws-sdk/lib/config.js:332:24)
at Config.getCredentials (node_modules/aws-sdk/lib/config.js:352:9)
at Request.VALIDATE_CREDENTIALS (node_modules/aws-sdk/lib/event_listeners.js:80:26)
at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:101:18)
at Request.emit (node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit (node_modules/aws-sdk/lib/request.js:683:14)
at Request.transition (node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (node_modules/aws-sdk/lib/state_machine.js:14:12)
at Request.runTo (node_modules/aws-sdk/lib/request.js:403:15)
at Request.send (node_modules/aws-sdk/lib/request.js:367:10)
at features.constructor.makeRequest (node_modules/aws-sdk/lib/service.js:193:27)
at features.constructor.svc.(anonymous function) [as describeTable] (node_modules/aws-sdk/lib/service.js:499:23)
at Table.describe (node_modules/dynamoose/lib/Table.js:339:7)
at Table.init (node_modules/dynamoose/lib/Table.js:141:10)
at Function.compile (node_modules/dynamoose/lib/Model.js:201:9)
at Dynamoose.model (node_modules/dynamoose/lib/index.js:39:21)
at Object.<anonymous> (models/modelName.js:63:35)
at require (internal/module.js:11:18)
at Object.<anonymous> (test/testFileName.js:4:25)
at require (internal/module.js:11:18)
at Array.forEach (<anonymous>)
at startup (bootstrap_node.js:188:16)
at bootstrap_node.js:609:3
现在,我知道这是一个问题,因为发电机无法配置区域。 但是,当我在开发中运行它时,使用同一段代码就不会出现任何问题。 在我的配置文件中,我也具有相同的数据库配置。 我通过在if (config.env == "test")
里面添加console.log(config.db)
验证这一点。 因此,我认为应该对其进行配置。
这是我是否需要测试:
describe('ModelName', () => {
beforeEach((done) => {
ModelName.delete({}, (err) => {
done();
});
});
describe('/GET modelName', () => {
it('it should GET all the model-name instances', (done) => {
chai.request(server)
.get('/model-name')
.end((err, res) => {
res.should.have.status(200);
res.body.should.be.a('array');
res.body.length.should.be.eql(0);
done();
});
});
});
});
任何想法可能是什么问题?
当您在本地运行时,您所在的区域将从位于以下位置的文件中提取
%UserProfile%\.aws\config
看起来像这样
[default]
region=us-west-2
output=json
我的猜测是,当您在服务器上运行时,块
dynamoose.AWS.config.update({
accessKeyId: config.db.aws_access_key_id,
secretAccessKey: config.db.aws_secret_access_key,
region: config.db.aws_region
});
并没有达到您的期望,但是当您在配置文件中获取配置时,在本地运行时该问题被隐藏了。
尝试将配置设置为文字region: 'us-west-2'
,或者可以设置凭据,并且配置是服务器上的环境变量(它们将自动被选择)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.