Files
2025-11-29 18:17:17 +08:00

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)

  1. Multi-source Data Aggregation
  2. Regex Filtering & Pattern Matching
  3. Markdown Parsing & Structured Extraction
  4. JSON Comparison & Validation
  5. CRM Data Transformation
  6. Release Information Processing
  7. Array Transformation with Context
  8. Slack Block Kit Formatting
  9. Top N Filtering & Ranking
  10. String Aggregation & Reporting

Error Prevention

Top 5 errors to avoid:

  1. Empty code / missing return (38% of failures)
  2. Expression syntax confusion (using {{}} in code)
  3. Incorrect return format (missing array wrapper or json property)
  4. Unmatched brackets (string escaping issues)
  5. 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

  1. Choose "All Items" mode (recommended)
  2. Access data: $input.all(), $input.first(), $input.item
  3. MUST return: [{json: {...}}] format
  4. Webhook data: Under .body property
  5. 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


Evaluations

5 test scenarios covering:

  1. Webhook body gotcha (most common mistake)
  2. Return format error (missing array wrapper)
  3. HTTP request with $helpers.httpRequest()
  4. Aggregation pattern with $input.all()
  5. 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.