1️⃣ Install Dependencies
npm init -y
npm install express minio dotenv
2️⃣ Project Structure (Recommended)
minio-service/
├── src/
│ ├── app.js
│ ├── minio/
│ │ └── minioClient.js
│ ├── routes/
│ │ └── bucket.routes.js
│ └── services/
│ └── bucket.service.js
├── .env
└── package.json
3️⃣ .env Configuration
PORT=3000
MINIO_ENDPOINT=localhost
MINIO_PORT=9000
MINIO_USE_SSL=false
MINIO_ACCESS_KEY=minioadmin
MINIO_SECRET_KEY=minioadmin
4️⃣ MinIO Client (src/minio/minioClient.js)
import { Client } from 'minio';
import dotenv from 'dotenv';
dotenv.config();
const minioClient = new Client({
endPoint: process.env.MINIO_ENDPOINT,
port: parseInt(process.env.MINIO_PORT),
useSSL: process.env.MINIO_USE_SSL === 'true',
accessKey: process.env.MINIO_ACCESS_KEY,
secretKey: process.env.MINIO_SECRET_KEY,
});
export default minioClient;
5️⃣ Bucket Service (src/services/bucket.service.js)
import minioClient from '../minio/minioClient.js';
export async function createBucket(bucketName) {
const exists = await minioClient.bucketExists(bucketName);
if (exists) {
return { created: false, message: 'Bucket already exists' };
}
await minioClient.makeBucket(bucketName);
return { created: true, message: 'Bucket created successfully' };
}
6️⃣ Bucket API Route (src/routes/bucket.routes.js)
import express from 'express';
import { createBucket } from '../services/bucket.service.js';
const router = express.Router();
/**
* POST /api/buckets
* Body: { "bucketName": "my-new-bucket" }
*/
router.post('/', async (req, res) => {
try {
const { bucketName } = req.body;
if (!bucketName) {
return res.status(400).json({ message: 'bucketName is required' });
}
const result = await createBucket(bucketName);
return res.status(200).json(result);
} catch (err) {
console.error(err);
return res.status(500).json({
message: 'Failed to create bucket',
error: err.message,
});
}
});
export default router;
7️⃣ Express App (src/app.js)
import express from 'express';
import bucketRoutes from './routes/bucket.routes.js';
const app = express();
app.use(express.json());
app.use('/api/buckets', bucketRoutes);
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`MinIO service running on port ${PORT}`);
});
8️⃣ Run the Application
node src/app.js
9️⃣ Test with CURL or Insomnia
Request
curl -X POST http://localhost:3000/api/buckets \
-H "Content-Type: application/json" \
-d '{
"bucketName": "test-bucket-001"
}'
Success Response
{
"created": true,
"message": "Bucket created successfully"
}
Already Exists
{
"created": false,
"message": "Bucket already exists"
}
🔐 Permissions Reminder
The MinIO user must have:
"s3:CreateBucket",
"s3:ListAllMyBuckets"
Otherwise you'll get AccessDenied.
Github: https://github.com/codefalconx/minio-service
Reference: https://www.min.io/
Top comments (0)