[object Object]

← back to NationalPaperHangers

fix(public/installer): coerce market_segments/materials elements to string before .replace — null array elements were crashing /installer/:slug rendering and triggering pm2 restart loop (41 restarts before fix)

f65e1d40a02210619105b51a61585338f250068f · 2026-05-06 11:11:18 -0700 · SteveStudio2

Files touched

Diff

commit f65e1d40a02210619105b51a61585338f250068f
Author: SteveStudio2 <steve@designerwallcoverings.com>
Date:   Wed May 6 11:11:18 2026 -0700

    fix(public/installer): coerce market_segments/materials elements to string before .replace — null array elements were crashing /installer/:slug rendering and triggering pm2 restart loop (41 restarts before fix)
---
 views/public/installer.ejs | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/views/public/installer.ejs b/views/public/installer.ejs
index ac82d2a..9bdbb8b 100644
--- a/views/public/installer.ejs
+++ b/views/public/installer.ejs
@@ -32,7 +32,7 @@
   <% var _heroImg = (portfolio.length === 0) ? pickSegmentImage(installer) : null; %>
   <% if (_heroImg) {
     var _attr = imageAttribution(_heroImg.file);
-    var _firstSeg = (installer.market_segments && installer.market_segments[0]) || 'interior';
+    var _firstSeg = String((installer.market_segments && installer.market_segments[0]) || 'interior');
   %>
     <div class="installer-hero-image">
       <img src="<%= _heroImg.file %>" alt="Wallcovering installation, <%= _firstSeg.replace(/_/g,' ') %>" loading="eager" decoding="async">
@@ -96,10 +96,10 @@
           <dt>Team</dt><dd><%= installer.team_size %> installer<%= installer.team_size === 1 ? '' : 's' %></dd>
         <% } %>
         <% if ((installer.market_segments || []).length) { %>
-          <dt>Segments</dt><dd><%= installer.market_segments.map(s => s.replace(/_/g,' ')).join(', ') %></dd>
+          <dt>Segments</dt><dd><%= installer.market_segments.map(s => String(s||'').replace(/_/g,' ')).filter(Boolean).join(', ') %></dd>
         <% } %>
         <% if ((installer.materials || []).length) { %>
-          <dt>Materials</dt><dd><%= installer.materials.map(s => s.replace(/_/g,' ')).join(', ') %></dd>
+          <dt>Materials</dt><dd><%= installer.materials.map(s => String(s||'').replace(/_/g,' ')).filter(Boolean).join(', ') %></dd>
         <% } %>
         <% if ((installer.brands_handled || []).length) { %>
           <dt>Brands installed</dt><dd><%= installer.brands_handled.join(', ') %></dd>

← 0b791b8 find: default to verified-only, add 'Show directory listings  ·  back to NationalPaperHangers  ·  auth: regenerate session on OAuth sign-in (fixation defense f240b01 →