9.3 KiB
n8n Code JavaScript
Expert guidance for writing JavaScript code in n8n Code nodes.
Purpose
Teaches how to write effective JavaScript in n8n Code nodes, avoid common errors, and use built-in functions effectively.
Activates On
Trigger keywords:
- "javascript code node"
- "write javascript in n8n"
- "code node javascript"
- "$input syntax"
- "$json syntax"
- "$helpers.httpRequest"
- "DateTime luxon"
- "code node error"
- "webhook data code"
- "return format code node"
Common scenarios:
- Writing JavaScript code in Code nodes
- Troubleshooting Code node errors
- Making HTTP requests from code
- Working with dates and times
- Accessing webhook data
- Choosing between All Items and Each Item mode
What You'll Learn
Quick Start
- Mode selection (All Items vs Each Item)
- Data access patterns ($input.all(), $input.first(), $input.item)
- Correct return format:
[{json: {...}}] - Webhook data structure (.body nesting)
- Built-in functions overview
Data Access Mastery
- $input.all() - Batch operations (most common)
- $input.first() - Single item operations
- $input.item - Each Item mode processing
- $node - Reference other workflow nodes
- Critical gotcha: Webhook data under
.body
Common Patterns (Production-Tested)
- Multi-source Data Aggregation
- Regex Filtering & Pattern Matching
- Markdown Parsing & Structured Extraction
- JSON Comparison & Validation
- CRM Data Transformation
- Release Information Processing
- Array Transformation with Context
- Slack Block Kit Formatting
- Top N Filtering & Ranking
- String Aggregation & Reporting
Error Prevention
Top 5 errors to avoid:
- Empty code / missing return (38% of failures)
- Expression syntax confusion (using
{{}}in code) - Incorrect return format (missing array wrapper or json property)
- Unmatched brackets (string escaping issues)
- Missing null checks (crashes on undefined)
Built-in Functions
- $helpers.httpRequest() - Make HTTP requests
- DateTime (Luxon) - Advanced date/time operations
- $jmespath() - Query JSON structures
- $getWorkflowStaticData() - Persistent storage
- Standard JavaScript globals (Math, JSON, console)
- Available Node.js modules (crypto, Buffer, URL)
File Structure
n8n-code-javascript/
├── SKILL.md (500 lines)
│ Overview, quick start, mode selection, best practices
│ - Mode selection guide (All Items vs Each Item)
│ - Data access patterns overview
│ - Return format requirements
│ - Critical webhook gotcha
│ - Error prevention overview
│ - Quick reference checklist
│
├── DATA_ACCESS.md (400 lines)
│ Complete data access patterns
│ - $input.all() - Most common (26% usage)
│ - $input.first() - Very common (25% usage)
│ - $input.item - Each Item mode (19% usage)
│ - $node - Reference other nodes
│ - Webhook data structure (.body nesting)
│ - Choosing the right pattern
│ - Common mistakes to avoid
│
├── COMMON_PATTERNS.md (600 lines)
│ 10 production-tested patterns
│ - Pattern 1: Multi-source Aggregation
│ - Pattern 2: Regex Filtering
│ - Pattern 3: Markdown Parsing
│ - Pattern 4: JSON Comparison
│ - Pattern 5: CRM Transformation
│ - Pattern 6: Release Processing
│ - Pattern 7: Array Transformation
│ - Pattern 8: Slack Block Kit
│ - Pattern 9: Top N Filtering
│ - Pattern 10: String Aggregation
│ - Pattern selection guide
│
├── ERROR_PATTERNS.md (450 lines)
│ Top 5 errors with solutions
│ - Error #1: Empty Code / Missing Return (38%)
│ - Error #2: Expression Syntax Confusion (8%)
│ - Error #3: Incorrect Return Wrapper (5%)
│ - Error #4: Unmatched Brackets (6%)
│ - Error #5: Missing Null Checks
│ - Error prevention checklist
│ - Quick error reference
│ - Debugging tips
│
├── BUILTIN_FUNCTIONS.md (450 lines)
│ Complete built-in function reference
│ - $helpers.httpRequest() API reference
│ - DateTime (Luxon) complete guide
│ - $jmespath() JSON querying
│ - $getWorkflowStaticData() persistent storage
│ - Standard JavaScript globals
│ - Available Node.js modules
│ - What's NOT available
│
└── README.md (this file)
Skill metadata and overview
Total: ~2,400 lines across 6 files
Coverage
Mode Selection
- Run Once for All Items - Recommended for 95% of use cases
- Run Once for Each Item - Specialized cases only
- Decision guide and performance implications
Data Access
- Most common patterns with usage statistics
- Webhook data structure (critical .body gotcha)
- Safe access patterns with null checks
- When to use which pattern
Error Prevention
- Top 5 errors covering 62%+ of all failures
- Clear wrong vs right examples
- Error prevention checklist
- Debugging tips and console.log usage
Production Patterns
- 10 patterns from real workflows
- Complete working examples
- Use cases and key techniques
- Pattern selection guide
Built-in Functions
- Complete $helpers.httpRequest() reference
- DateTime/Luxon operations (formatting, parsing, arithmetic)
- $jmespath() for JSON queries
- Persistent storage with $getWorkflowStaticData()
- Standard JavaScript and Node.js modules
Critical Gotchas Highlighted
#1: Webhook Data Structure
MOST COMMON MISTAKE: Webhook data is under .body
// ❌ WRONG
const name = $json.name;
// ✅ CORRECT
const name = $json.body.name;
#2: Return Format
CRITICAL: Must return array with json property
// ❌ WRONG
return {json: {result: 'success'}};
// ✅ CORRECT
return [{json: {result: 'success'}}];
#3: Expression Syntax
Don't use {{}} in Code nodes
// ❌ WRONG
const value = "{{ $json.field }}";
// ✅ CORRECT
const value = $json.field;
Integration with Other Skills
n8n Expression Syntax
- Distinction: Expressions use
{{}}in OTHER nodes - Code nodes: Use JavaScript directly (no
{{}}) - When to use each: Code vs expressions decision guide
n8n MCP Tools Expert
- Find Code node:
search_nodes({query: "code"}) - Get configuration:
get_node_essentials("nodes-base.code") - Validate code:
validate_node_operation()
n8n Node Configuration
- Mode selection (All Items vs Each Item)
- Language selection (JavaScript vs Python)
- Understanding property dependencies
n8n Workflow Patterns
- Code nodes in transformation step
- Webhook → Code → API pattern
- Error handling in workflows
n8n Validation Expert
- Validate Code node configuration
- Handle validation errors
- Auto-fix common issues
When to Use Code Node
Use Code node when:
- ✅ Complex transformations requiring multiple steps
- ✅ Custom calculations or business logic
- ✅ Recursive operations
- ✅ API response parsing with complex structure
- ✅ Multi-step conditionals
- ✅ Data aggregation across items
Consider other nodes when:
- ❌ Simple field mapping → Use Set node
- ❌ Basic filtering → Use Filter node
- ❌ Simple conditionals → Use IF or Switch node
- ❌ HTTP requests only → Use HTTP Request node
Code node excels at: Complex logic that would require chaining many simple nodes
Success Metrics
Before this skill:
- Users confused by mode selection
- Frequent return format errors
- Expression syntax mistakes
- Webhook data access failures
- Missing null check crashes
After this skill:
- Clear mode selection guidance
- Understanding of return format
- JavaScript vs expression distinction
- Correct webhook data access
- Safe null-handling patterns
- Production-ready code patterns
Quick Reference
Essential Rules
- Choose "All Items" mode (recommended)
- Access data:
$input.all(),$input.first(),$input.item - MUST return:
[{json: {...}}]format - Webhook data: Under
.bodyproperty - No
{{}}syntax: Use JavaScript directly
Most Common Patterns
- Batch processing → $input.all() + map/filter
- Single item → $input.first()
- Aggregation → reduce()
- HTTP requests → $helpers.httpRequest()
- Date handling → DateTime (Luxon)
Error Prevention
- Always return data
- Check for null/undefined
- Use try-catch for risky operations
- Test with empty input
- Use console.log() for debugging
Related Documentation
- n8n Code Node Guide: https://docs.n8n.io/code/code-node/
- Built-in Methods Reference: https://docs.n8n.io/code-examples/methods-variables-reference/
- Luxon Documentation: https://moment.github.io/luxon/
Evaluations
5 test scenarios covering:
- Webhook body gotcha (most common mistake)
- Return format error (missing array wrapper)
- HTTP request with $helpers.httpRequest()
- Aggregation pattern with $input.all()
- Expression syntax confusion (using
{{}})
Each evaluation tests skill activation, correct guidance, and reference to appropriate documentation files.
Version History
- v1.0 (2025-01-20): Initial implementation
- SKILL.md with comprehensive overview
- DATA_ACCESS.md covering all access patterns
- COMMON_PATTERNS.md with 10 production patterns
- ERROR_PATTERNS.md covering top 5 errors
- BUILTIN_FUNCTIONS.md complete reference
- 5 evaluation scenarios
Author
Conceived by Romuald Członkowski - www.aiadvisors.pl/en
Part of the n8n-skills collection.