当前位置:  开发笔记 > 编程语言 > 正文

aws DynamoDB给出"写EPROTO"

如何解决《awsDynamoDB给出"写EPROTO"》经验,为你挑选了1个好方法。

我正在使用dynamoDB来保存Web服务正在生成的数据.我有时(它不一致)得到'EPROTO'错误,我读到它并且这是一个协议错误,但我使用aws-sdk(javascript)并且我没有说明任何与协议相关的细节.

这是我初始化它的方式:

var aws = require('aws-sdk');
var dynamoDB = new aws.DynamoDB({
    accessKeyId: config.DynamoDB.accessKeyId,
    secretAccessKey: config.DynamoDB.secretAccessKey,
    region: config.DynamoDB.region
});

我只是使用put api:

dynamoDB.putItem(params, function(err, dat) {
    if (err) {
       console.log('ERROR: Putting to dynamo failed with error: ' + err.message);
    }
    else {
       console.log('wipi');
       //passing data 
    }
});

params 如下:

var params = {
    TableName: config.DynamoDB.tableNames.data, //this is the table name, a string
    Item: {
        id: {
            S: id // this is a generated uid (also a string)
        },
        scheme: {
            S: ivd.version // this is a string of structure 'X.X.X'
        },
        data: {
            S: JSON.stringify(data.data) // data.data is a big object - {arg1: [1, 2, 3...], arg2: '', ...}
        }
    }
};

我应该提一下,它在同一个params对象上是不一致的(只有生成的uid才有所不同).

任何想法这个错误在我的情况下意味着什么,为什么会发生?



1> Rotem Tamir..:

在https://github.com/aws/aws-sdk-js/issues/862讨论之后:

DynamoDB方面似乎存在不一致的问题,即TLS DynamoDB的哪个版本用于在客户端进行通信.要解决此问题,您需要强制SDK使用TLS v1:

const https = require('https');
const dynamodb = new AWS.DynamoDB({
    region: 'us-east-1',
    httpOptions: {
        agent: new https.Agent({
            ciphers: 'ALL',
            secureProtocol: 'TLSv1_method'
        })
    }
});

const dynamodbDoc = new AWS.DynamoDB.DocumentClient({
    region: 'us-east-1',
    service: dynamodb
});

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有