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

时间:2017-04-06 21:41:36

标签: javascript node.js express ejs

我正在尝试使用node.js构建简单的天气应用程序。我想在单独的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文件?

2 个答案:

答案 0 :(得分:2)

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

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>

答案 1 :(得分:0)

如果您使用express-session之类的内容,则可以将数据存储在req.session对象中,然后在文件中使用

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

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

temp.ejs:

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