New Jersey had not defeated St. Louis since Jan. 21, 2014 (12 games).
Jordan Binnington made 28 saves for the Blues (40-18-10), the Central Division leaders who outscored opponents 28-13 in the eight consecutive wins. Binnington lost for the first time in seven starts, which included a 3-0 win against the Devils on Feb. 18.
WATCH: [All Blues vs. Devils highlights]
"They were the better team," St. Louis coach Craig Berube said. "We didn't execute very well with the puck, just a lot of bobbled pucks, missed passes. They were quicker and on us and we really didn't get to our game tonight."
Cory Schneider made 31 saves for his first home win of the season, and Dakota Mermis scored his first NHL goal for the Devils (27-28-12), who have won five straight home games and are 9-4-2 in their past 15 overall.
"I don't think we snuck one out or got lucky, but we matched them play for play and thought we were with them right until the end," Schneider said. "I give our guys a lot of credit. [St. Louis] is a tough team to handle down low with a lot of weapons, but my teammates worked hard and really battled tonight."
Schneider last won at home on March 25, 2019 (five games). He is 3-0-1 since being recalled from Binghamton of the American Hockey League on Feb. 20.
"I feel pretty active in the crease, feel like I'm finding pucks pretty well, point shots, maybe ones I was not seeing earlier in the year or maybe not quite working hard enough to locate," Schneider said. "Right now, I feel good about finding my windows and lanes and just getting eyes on the puck."
Mermis scored through a screen off a snap shot from the left face-off circle at 6:50 of the second period to give the Devils a 2-1 lead. Connor Carrick scored his first of the season with a snap shot from the top of the right face-off circle to make it 3-1 at 17:58.