将数据从POST路由传递到模板

我正在尝试使用node.js构build简单的天气应用程序。 我想在单独的ejs文件中显示天气信息。

我的后路线代码如下所示:

app.post('/', (req, res) => { var address = req.body.address; location.getLocation(address, (error, results) => { if(error) { console.log(error); } else { fetchWeather.getWeather(results.latitude, results.longitude, (error, weatherResults) => { if(error){ console.log(error); } else { var temp = weatherResults.temperature; var appTemp = weatherResults.apparentTemperature; console.log(temp, appTemp); } }); } }); res.redirect('weatherinfo'); }); 

我正在使用请求来获取单独的文件中的数据:

  var getWeather = (lat, lng, callback) => { request({ url:`https://api.darksky.net/forecast/mycode/${lat},${lng} ?units=si`, json: true }, (error, response, body) => { if (!error && response.statusCode === 200) { callback(undefined, { temperature: body.currently.temperature, apparentTemperature: body.currently.apparentTemperature }); } else { callback('Unable to fetch weather.'); } }); 

};

如何将温度和apparentTemperature输出到我的ejs文件?

您可以将温度数据作为variables传递给视图:

 app.post('/', (req, res) => { var address = req.body.address; location.getLocation(address, (error, results) => { if(error) { console.log(error); } else { fetchWeather.getWeather(results.latitude, results.longitude, (error, weatherResults) => { if(error){ console.log(error); } else { var temp = weatherResults.temperature; var appTemp = weatherResults.apparentTemperature; res.render('pages/yourFile.ejs, { temp: temp, appTemp: appTemp }); } }); } }); }); 

并在你的ejs文件中使用它们:

 <p><%= temp %></p> <p><%= appTemp %></p> 

如果你使用类似express-session的东西,你可以将你的数据存储在req.session对象中,然后在你的文件中使用它

如果您不需要在用户会话中保持持久性,则可以将数据存储在res.locals中,这些数据可以被大多数快速视图引擎识别,例如EJS :

 res.locals.temp = temp; res.render('temp'); 

temp.ejs:

 <% if (temp) { %> <h2><%= temp %></h2> <% } %>