我刚刚安装了 moto 并尝试使用以下 node.js 代码连接到独立服务器:

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 的方式是 moto_server route53 :
> moto_server route53
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

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

最佳答案

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() 输出的方式是错误的。更正后,代码可以正常工作。

关于node.js - 如何连接到moto独立服务器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47870312/

10-11 08:43