使用AWS SDK for Node.js连接本地MinIO服务器遇端点错误求助
解决方案
问题出在SDK的请求风格和MinIO端口的混淆,以下是修正步骤:
1. 修正MinIO的Endpoint地址
MinIO的9001端口是Web控制台端口,API请求必须使用9000端口。所以endpoint应该设置为http://localhost:9000,而不是9001。
2. 强制SDK使用路径风格访问
AWS SDK默认使用虚拟主机风格(bucket.endpoint.com)构造请求,但本地没有test.localhost的DNS解析,导致getaddrinfo ENOTFOUND错误。需要强制SDK使用路径风格(endpoint.com/bucket),添加forcePathStyle: true配置。
3. 修正环境变量判断逻辑
原来的代码只在生产环境(isReleaseVersion()为true)时配置endpoint,这完全搞反了——开发环境才需要指向本地MinIO,生产环境用AWS默认配置即可。
4. 添加必填的region参数
AWS SDK要求必须配置region,MinIO对区域没有严格限制,随便填一个兼容值(比如us-east-1)即可。
修正后的S3Client配置代码:
import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3'; #s3Client = new S3Client({ credentials: { accessKeyId: config.getAwsStorageAccessKeyId(), secretAccessKey: config.getAwsStorageSecretAccessKey(), }, ...(!globalConfig.isReleaseVersion() && { endpoint: 'http://localhost:9000', // 指向MinIO API端口 forcePathStyle: true, // 强制路径风格,避免虚拟主机解析错误 region: 'us-east-1' // 必填区域参数 }), });
额外检查项
- 确认MinIO中已经创建了名为
test的存储桶 - 确认环境变量中的AccessKey和SecretKey与MinIO控制台配置的一致
内容的提问来源于stack exchange,提问作者Furman
相关产品推荐
相关产品推荐

