Node.js UUID Evolution Timeline
Third-Party Only
Required uuid npm package for UUID generation
npm install uuid
crypto.randomUUID() Introduced
Native UUID v4 generation added to crypto module
const { randomUUID } = require('crypto');
Native UUID Standard
Stable crypto.randomUUID() with ES Modules support
import { randomUUID } from 'crypto';
Generate UUID with Native Node.js Crypto Module
✓ No Dependencies Required
Built into Node.js 14.17.0 and later. Zero npm packages needed! See the go uuid page for UUID primary keys in GORM and pgx with optimal PostgreSQL storage.
CommonJS
const { randomUUID } = require('crypto');
const uuid = randomUUID();
console.log(uuid);
ES Modules
import { randomUUID } from 'crypto';
const uuid = randomUUID();
console.log(uuid);
Async/Await UUID Generation Patterns
import { randomUUID } from 'crypto';
// Async function with UUID generation
async function createUser(name, email) {
const userId = randomUUID();
// Simulate database operation
const user = {
id: userId,
name,
email,
createdAt: new Date().toISOString()
};
await saveToDatabase(user);
return user;
}
// Generate multiple UUIDs asynchronously
async function generateBatchUUIDs(count) {
const uuids = [];
for (let i = 0; i < count; i++) {
// Synchronous UUID generation in async context
uuids.push(randomUUID());
}
return uuids;
}
// Usage
(async () => {
const user = await createUser('Alice', '[email protected]');
console.log('Created user:', user.id);
const batchUuids = await generateBatchUUIDs(100);
console.log(`Generated ${batchUuids.length} UUIDs`);
})();
Express.js Middleware: Request UUID Tracking
Automatic Request ID Generation
import express from 'express';
import { randomUUID } from 'crypto';
const app = express();
// Middleware: Add UUID to every request
app.use((req, res, next) => {
req.id = randomUUID();
res.setHeader('X-Request-ID', req.id);
console.log(`[${req.id}] ${req.method} ${req.path}`);
next();
});
// Route handler with request tracking
app.post('/users', async (req, res) => {
const userId = randomUUID();
console.log(`[${req.id}] Creating user with ID: ${userId}`);
const user = {
id: userId,
...req.body,
createdAt: new Date()
};
res.json({ requestId: req.id, user });
});
app.listen(3000);
Advanced Logging with UUID Correlation
import winston from 'winston';
import { randomUUID } from 'crypto';
// Logger with correlation ID
const logger = winston.createLogger({
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
transports: [new winston.transports.Console()]
});
// Middleware with structured logging
app.use((req, res, next) => {
req.id = randomUUID();
req.log = (level, message, meta = {}) => {
logger.log({
level,
message,
requestId: req.id,
method: req.method,
path: req.path,
...meta
});
};
req.log('info', 'Request started');
next();
});
UUID npm Package: All Versions Support
For UUID v1, v5, v6, and v7 support, install the uuid package: The typescript uuid page includes UUID generation patterns for Prisma schemas, TypeORM entities, and NestJS DTOs.
npm Package Installation
npm install uuid
import { v1, v4, v5, v7, validate, version } from 'uuid';
// UUID v4 - Random (most common)
const uuidV4 = v4();
console.log('v4:', uuidV4);
// UUID v1 - Timestamp + MAC address
const uuidV1 = v1();
console.log('v1:', uuidV1);
// UUID v7 - Unix timestamp (sortable, database-optimized)
const uuidV7 = v7();
console.log('v7:', uuidV7);
// UUID v5 - SHA-1 hash (deterministic)
const NAMESPACE = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
const uuidV5 = v5('example.com', NAMESPACE);
console.log('v5:', uuidV5);
// Validate UUID
console.log('Valid:', validate(uuidV4)); // true
// Get version
console.log('Version:', version(uuidV4)); // 4
MongoDB Integration with UUID Primary Keys
import { MongoClient } from 'mongodb';
import { randomUUID } from 'crypto';
const client = new MongoClient('mongodb://localhost:27017');
async function createUser(name, email) {
await client.connect();
const db = client.db('myapp');
const users = db.collection('users');
const user = {
_id: randomUUID(), // Use UUID instead of ObjectId
name,
email,
createdAt: new Date()
};
await users.insertOne(user);
console.log('Created user:', user._id);
return user;
}
async function getUserById(uuid) {
await client.connect();
const db = client.db('myapp');
return await db.collection('users').findOne({ _id: uuid });
}
Session Management with UUID Tokens
import { randomUUID } from 'crypto';
class SessionManager {
constructor() {
this.sessions = new Map();
}
createSession(userId) {
const sessionId = randomUUID();
const expiresAt = Date.now() + (24 * 60 * 60 * 1000); // 24 hours
this.sessions.set(sessionId, {
userId,
createdAt: Date.now(),
expiresAt
});
return sessionId;
}
validateSession(sessionId) {
const session = this.sessions.get(sessionId);
if (!session) return null;
if (Date.now() > session.expiresAt) {
this.sessions.delete(sessionId);
return null;
}
return session;
}
destroySession(sessionId) {
return this.sessions.delete(sessionId);
}
}
// Usage in Express
const sessionManager = new SessionManager();
app.post('/login', (req, res) => {
const sessionId = sessionManager.createSession(req.body.userId);
res.cookie('session', sessionId, { httpOnly: true });
res.json({ sessionId });
});