2017-12-18 381 views
0

我刚安装moto,并试图用下面的node.js代码连接到独立服务器:如何连接到moto独立服务器?

const AWS = require('aws-sdk') 
const ep = new AWS.Endpoint('http://127.0.0.1:5000') 
const route53 = new AWS.Route53({endpoint: ep}) 

const params = {} 
console.log(route53.listHostedZones(params)) 

代码设置AWS服务的endpoint,它指向的moto的独立服务器。然后向端点发送listHostedZones请求。这个程序的输出是

Request { 
domain: null, 
service: 
Service { 
    config: 
    Config { 
     credentials: [Object], 
     credentialProvider: [Object], 
     region: undefined, 
     logger: null, 
     apiVersions: {}, 
     apiVersion: null, 
     endpoint: [Object], 
     httpOptions: [Object], 
     maxRetries: undefined, 
     maxRedirects: 10, 
     paramValidation: true, 
     sslEnabled: true, 
     s3ForcePathStyle: false, 
     s3BucketEndpoint: false, 
     s3DisableBodySigning: true, 
     computeChecksums: true, 
     convertResponseTypes: true, 
     correctClockSkew: false, 
     customUserAgent: null, 
     dynamoDbCrc32: true, 
     systemClockOffset: 0, 
     signatureVersion: null, 
     signatureCache: true, 
     retryDelayOptions: {}, 
     useAccelerateEndpoint: false }, 
    endpoint: 
    Endpoint { 
     protocol: 'http:', 
     host: '127.0.0.1:5000', 
     port: 5000, 
     hostname: '127.0.0.1', 
     pathname: '/', 
     path: '/', 
     href: 'http://127.0.0.1:5000/', 
     constructor: [Object] }, 
    _clientId: 1 }, 
operation: 'listHostedZones', 
params: {}, 
httpRequest: 
HttpRequest { 
    method: 'POST', 
    path: '/', 
    headers: { 'User-Agent': 'aws-sdk-nodejs/2.166.0 darwin/v6.2.2' }, 
    body: '', 
    endpoint: 
    Endpoint { 
     protocol: 'http:', 
     host: '127.0.0.1:5000', 
     port: 5000, 
     hostname: '127.0.0.1', 
     pathname: '/', 
     path: '/', 
     href: 'http://127.0.0.1:5000/', 
     constructor: [Object] }, 
    region: undefined, 
    _userAgent: 'aws-sdk-nodejs/2.166.0 darwin/v6.2.2' }, 
startTime: 2017-12-18T13:27:48.148Z, 
response: 
Response { 
    request: [Circular], 
    data: null, 
    error: null, 
    retryCount: 0, 
    redirectCount: 0, 
    httpResponse: 
    HttpResponse { 
     statusCode: undefined, 
     headers: {}, 
     body: undefined, 
     streaming: false, 
     stream: null }, 
    maxRetries: 3, 
    maxRedirects: 10 }, 
_asm: 
AcceptorStateMachine { 
    currentState: 'validate', 
    states: 
    { validate: [Object], 
     build: [Object], 
     afterBuild: [Object], 
     sign: [Object], 
     retry: [Object], 
     afterRetry: [Object], 
     send: [Object], 
     validateResponse: [Object], 
     extractError: [Object], 
     extractData: [Object], 
     restart: [Object], 
     success: [Object], 
     error: [Object], 
     complete: [Object] } }, 
_haltHandlersOnError: false, 
_events: 
{ validate: 
    [ [Object], 
     [Function: VALIDATE_REGION], 
     [Function: BUILD_IDEMPOTENCY_TOKENS], 
     [Function: VALIDATE_PARAMETERS] ], 
    afterBuild: 
    [ [Object], 
     [Function: SET_CONTENT_LENGTH], 
     [Function: SET_HTTP_HOST] ], 
    restart: [ [Function: RESTART] ], 
    sign: [ [Object] ], 
    validateResponse: [ [Function: VALIDATE_RESPONSE] ], 
    send: [ [Object] ], 
    httpHeaders: [ [Function: HTTP_HEADERS] ], 
    httpData: [ [Function: HTTP_DATA] ], 
    httpDone: [ [Function: HTTP_DONE] ], 
    retry: 
    [ [Function: FINALIZE_ERROR], 
     [Function: INVALIDATE_CREDENTIALS], 
     [Function: EXPIRED_SIGNATURE], 
     [Function: CLOCK_SKEWED], 
     [Function: REDIRECT], 
     [Function: RETRY_CHECK] ], 
    afterRetry: [ [Object] ], 
    build: [ [Function: buildRequest], [Function: sanitizeUrl] ], 
    extractData: [ [Function: extractData], [Function: extractRequestId] ], 
    extractError: [ [Function: extractError], [Function: extractRequestId] ], 
    httpError: [ [Function: ENOTFOUND_ERROR] ] }, 
emit: [Function: emit] } 

正如你可以在上面的输出中看到,有一个ENOTFOUND_ERROR错误的。我无法在moto的控制台输出中找到任何新的连接。

我开始摩托车的方式是moto_server route53

> moto_server route53 
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 

这有什么错我的配置?我认为我的node.js代码有问题。我是否误解了endpoint的含义?

回答

0
const AWS = require('aws-sdk') 
const ep = new AWS.Endpoint('http://127.0.0.1:5000') 
const initParam = { 
    endpoint: ep, 
    region: 'ap-northeast-1' 
} 
const route53 = new AWS.Route53(initParam) 

let params = { 
    CallerReference: 'unique_string_affh38h98hasd8f76a', 
    Name: 'www.example.com' 
} 
route53.createHostedZone(params, (err, data) => { 
    if (err) { 
    console.error(`createHostedZone err: ${err}`) 
    } else { 
    console.log(`createHostedZone data: ${JSON.stringify(data)}`) 
    } 
}) 

我忘了设置region参数。我查看listHostedZones()的输出的方式是错误的。纠正它们后,代码正常工作。