Salas came on to protect a one-run St. Louis lead with one out in the eighth, after the Astros had loaded the bases on three walks. Salas got Jose Altuve on three pitches and then struck out Brett Wallace on a called third strike to end the threat.
Jason Motte picked up the save -- his 38th -- after allowing a leadoff single to Matt Dominguez. However, he struck out the next three batters, giving the Cardinals 10 strikeouts on the day.
St. Louis starter Jaime Garcia (5-7) pitched six innings, allowing six hits and three runs while walking two and striking out six.
Houston's Bud Norris (5-13) was knocked around for five runs on six hits, five walks and seven strikeouts. The Astros are 1-17 in Morris' last 18 appearances.
Morris has lost 12 straight decisions since his last win, May 21.
Houston opened the scoring in the first with a bases-loaded walk to Brand Laird but St. Louis used a three-run home run by Allen Craig in the bottom of the inning to take the lead.
Brandon Barnes made the score 5-4 with an RBI single in the Houston seventh.
Megyn Kelly: Santa Claus and Jesus are both white men
Costly malfunction causes beer flood at Boston-area brewery