问个 函数计算 的问题:
exports.handler = function(event, context, callback) {
console.log('event: %s', event);
var creds = context.credentials;
var client = new TableStore.Client({
accessKeyId: creds.accessKeyId,
secretAccessKey: creds.accessKeySecret,
stsToken: creds.securityToken,
endpoint: 'http://'+instanceName+'.cn-beijing.ots.aliyuncs.com',
instancename: instanceName,
});
我看example上是这样写的 但提示说
creds.accessKeyId is not buffer
本问题来自阿里云开发者社区的【11大垂直技术领域开发者社群】。https://developer.aliyun.com/article/706511 点击链接欢迎加入感兴趣的技术领域群。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在您提供的代码片段中,错误提示creds.accessKeyId is not buffer
表明creds.accessKeyId
的类型预期是一个Buffer,但实际上它不是。这通常是因为阿里云函数计算(Function Compute)的上下文对象中的credentials属性直接提供的是字符串形式的密钥和安全令牌,而不是Buffer对象。
为了修正这个问题,您不需要将它们转换为Buffer,因为OTS SDK(Table Store SDK)应该能够直接接受字符串类型的密钥信息。请确保您的SDK版本与期望的功能兼容,并且按照最新的官方文档调整代码。以下是一个根据您的场景调整后的示例代码:
exports.handler = async function(event, context) {
console.log('event: %s', event);
// 直接使用字符串形式的凭证信息
var client = new TableStore.Client({
accessKeyId: context.credentials.accessKeyId,
secretAccessKey: context.credentials.accessKeySecret,
stsToken: context.credentials.securityToken, // 如果使用STS token的话
endpoint: `http://${context.instanceName}.cn-beijing.ots.aliyuncs.com`, // 注意使用模板字符串来构造endpoint
instanceName: context.instanceName, // 这一行可能是多余的,因为endpoint中已经包含了instanceName
});
// 接下来可以添加您的业务逻辑,比如操作表等
};
请注意几点: 1. 我使用了模板字符串(反引号 ``)来构造endpoint URL,这样可以直接插入变量。 2. instancename
字段在您的代码中拼写有误,应为instanceName
,但根据OTS SDK的最新用法,这个字段可能并不需要单独指定,因为它已经在endpoint中体现。 3. 确保您的context
对象中确实包含了instanceName
、accessKeyId
、accessKeySecret
以及在使用STS时的securityToken
。 4. 检查您使用的阿里云Table Store SDK版本,确保其与您的Node.js环境兼容,并遵循该版本的官方文档进行调用。
如果问题依旧,请检查您的SDK版本并参考最新的阿里云Table Store SDK文档以获取正确的初始化客户端方式。