NEW YORK -- With a 360-foot relay in the ninth inning, the New York Mets prevented a hard-fought victory from vanishing in the wind.
Lucas Duda hit a long home run and New York threw out the potential tying run at the plate to hold off the St. Louis Cardinals 3-2 Wednesday on a blustery night at Citi Field.
Jonathon Niese earned his first win of the season, and shortstop Ruben Tejada cut down Matt Carpenter for the second out of the ninth on a strong relay from center fielder Kirk Nieuwenhuis.
''My heart's still racing,'' Mets catcher Travis d'Arnaud said. ''A 180-spin throw like that - a perfect throw. I still can't believe I witnessed that.''
St. Louis manager Mike Matheny challenged the call by plate umpire Marty Foster, which was confirmed following a replay review of 1 minute, 20 seconds that showed d'Arnaud nicked Carpenter with a sweep tag behind his armpit.
''I didn't feel the tag and I initially thought that I was safe,'' Carpenter said. ''But I got a chance to look at it and it was a good call.''
With a runner on second, Kyle Farnsworth sealed it by retiring Matt Holliday on a tricky fly to right.
Cardinals right-hander Michael Wacha (2-2) set career highs with 10 strikeouts and five walks in the shortest of his 14 regular-season starts in the majors. A bizarre outing if ever there was one - but it was that sort of night.
Curtis Granderson snapped his career-worst hitless skid at 22 at-bats with a first-inning single, and the Mets got 6 2/3 effective innings from Niese (1-2) with wind gusting up to 41 mph on a 51-degree night.
''Kind of throwing cue balls out there,'' Niese said. ''It kind of felt like I was throwing with an ice pack on. It's tough to keep warm.''
Carlos Torres and Scott Rice escaped an eighth-inning jam before Farnsworth worked the ninth for his second save. He gave up consecutive singles and an RBI double to pinch-hitter Daniel Descalso that one-hopped the wall in left-center, but New York's defense saved Farnsworth.
''Two great throws,'' Carpenter said. ''That's a tough play that's not made a whole lot, especially with the game on the line.''
Carpenter had four hits and Yadier Molina added three for the Cardinals, but Jhonny Peralta's hitless streak reached 21 at-bats. Peralta popped out with runners at second and third in the eighth before pinch-hitter Matt Adams flied out to end the inning.
Niese improved to 4-1 with a 1.87 ERA in six career starts against St. Louis.
''I don't know what it is with Jon and cold weather, but he gets the call,'' Mets manager Terry Collins said. ''He pitched absolutely great tonight in the conditions.''
The game began in a 31 mph wind at a mostly empty stadium. Workers hustled between innings to clean up all the flying napkins and hot dog wrappers that littered the outfield - even bundled-up second base umpire Rob Drake helped out during a stoppage in play.
''It was terrible. The worst. Not fun,'' Carpenter said.
High popups and flyballs were an adventure. Tejada dropped one after retreating into the outfield, then scampering back to the infield. New York still got an easy forceout on the play.
Wacha's red cap blew right off his head as he was waiting for a new ball and rolled, like tumbleweed, to second baseman Mark Ellis.
Duda homered against Seth Maness leading off the sixth, a laser beam of a line drive that cut under the wind and nearly reached the Shea Bridge walkway above the bullpens in right-center.
It was the first home run for the Mets in their past seven home games, ending their longest such drought since May 2012.
Early on, it appeared the 22-year-old Wacha was headed to a record-setting performance.
Last year's NL championship series MVP overpowered the Mets with nine strikeouts in the first three innings but soon lost his control. He walked three in the fourth, including No. 8 batter Tejada and Nieuwenhuis with the bases loaded, forcing in two runs.
Wacha was pulled for a pinch hitter in the fifth after throwing 93 pitches. Coming in, he had issued only three free passes in 26 innings this season.
The Mets said Wacha joined Smoky Joe Wood (1909), Felix Hernandez (2013) and Danny Salazar (2014) as the only pitchers since 1900 to have at least 10 strikeouts in an outing that lasted no more than four innings, according to the Elias Sports Bureau.
Molina doubled home a run with two outs in the first, extending his hitting streak to 14 games, after Tejada and the Mets botched a rundown that should have resulted in an inning-ending double play.
Cardinals ace Adam Wainwright (knee) expects to make his next scheduled start Sunday against Pittsburgh, Matheny said. ... Mets leadoff hitter Eric Young Jr. was rested.