mirror of
https://github.com/czlonkowski/n8n-mcp.git
synced 2026-03-23 10:53:07 +00:00
enhance: Add HTTP Request node validation suggestions (issue #361)
Added helpful suggestions for HTTP Request node best practices after thorough investigation of issue #361. ## What's New 1. **alwaysOutputData Suggestion** - Suggests adding alwaysOutputData: true at node level - Prevents silent workflow failures when HTTP requests error - Ensures downstream error handling can process failed requests 2. **responseFormat Suggestion for API Endpoints** - Suggests setting options.response.response.responseFormat - Prevents JSON parsing confusion - Triggered for URLs containing /api, /rest, supabase, firebase, googleapis, .com/v 3. **Enhanced URL Protocol Validation** - Detects missing protocol in expression-based URLs - Warns about patterns like =www.{{ $json.domain }}.com - Warns about expressions without protocol ## Investigation Findings **Key Discoveries:** - Mixed expression syntax =literal{{ expression }} actually works in n8n (claim was incorrect) - Real validation gaps: missing alwaysOutputData and responseFormat checks - Compared broken vs fixed workflows to identify actual production issues **Testing Evidence:** - Analyzed workflow SwjKJsJhe8OsYfBk with mixed syntax - executions successful - Compared broken workflow (mBmkyj460i5rYTG4) with fixed workflow (hQI9pby3nSFtk4TV) - Identified that fixed workflow has alwaysOutputData: true and explicit responseFormat ## Impact - Non-Breaking: All changes are suggestions/warnings, not errors - Actionable: Clear guidance on how to implement best practices - Production-Focused: Addresses real workflow reliability concerns ## Test Coverage Added 8 new test cases covering: - alwaysOutputData suggestion for all HTTP Request nodes - responseFormat suggestion for API endpoint detection - responseFormat NOT suggested when already configured - URL protocol validation for expression-based URLs - No false positives when protocol is correctly included ## Files Changed - src/services/enhanced-config-validator.ts - Added enhanceHttpRequestValidation() - tests/unit/services/enhanced-config-validator.test.ts - Added 8 test cases - CHANGELOG.md - Documented enhancement with investigation findings - package.json - Bump version to 2.22.2 Fixes #361 Conceived by Romuald Członkowski - https://www.aiadvisors.pl/en
This commit is contained in:
@@ -401,7 +401,48 @@ export class EnhancedConfigValidator extends ConfigValidator {
|
||||
config: Record<string, any>,
|
||||
result: EnhancedValidationResult
|
||||
): void {
|
||||
// Examples removed - validation provides error messages and fixes instead
|
||||
const url = String(config.url || '');
|
||||
const options = config.options || {};
|
||||
|
||||
// 1. Suggest alwaysOutputData for better error handling (node-level property)
|
||||
// Note: We can't check if it exists (it's node-level, not in parameters),
|
||||
// but we can suggest it as a best practice
|
||||
if (!result.suggestions.some(s => typeof s === 'string' && s.includes('alwaysOutputData'))) {
|
||||
result.suggestions.push(
|
||||
'Consider adding alwaysOutputData: true at node level (not in parameters) for better error handling. ' +
|
||||
'This ensures the node produces output even when HTTP requests fail, allowing downstream error handling.'
|
||||
);
|
||||
}
|
||||
|
||||
// 2. Suggest responseFormat for API endpoints
|
||||
const isApiEndpoint = url.includes('/api') || url.includes('/rest') ||
|
||||
url.includes('supabase') || url.includes('firebase') ||
|
||||
url.includes('googleapis') || url.includes('.com/v');
|
||||
|
||||
if (isApiEndpoint && !options.response?.response?.responseFormat) {
|
||||
result.suggestions.push(
|
||||
'API endpoints should explicitly set options.response.response.responseFormat to "json" or "text" ' +
|
||||
'to prevent confusion about response parsing. Example: ' +
|
||||
'{ "options": { "response": { "response": { "responseFormat": "json" } } } }'
|
||||
);
|
||||
}
|
||||
|
||||
// 3. Enhanced URL protocol validation for expressions
|
||||
if (url && url.startsWith('=')) {
|
||||
// Expression-based URL - check for common protocol issues
|
||||
const expressionContent = url.slice(1); // Remove = prefix
|
||||
|
||||
// Check for missing protocol in expression
|
||||
if (expressionContent.startsWith('www.') ||
|
||||
(expressionContent.includes('{{') && !expressionContent.includes('http'))) {
|
||||
result.warnings.push({
|
||||
type: 'invalid_value',
|
||||
property: 'url',
|
||||
message: 'URL expression appears to be missing http:// or https:// protocol',
|
||||
suggestion: 'Include protocol in your expression. Example: ={{ "https://" + $json.domain + ".com" }}'
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user