【问题标题】:Passing JSON URL data to .ejs view in Node.js将 JSON URL 数据传递给 Node.js 中的 .ejs 视图
【发布时间】:2018-03-11 19:44:15
【问题描述】:

我有一个小型 Node.js 应用程序正在运行,它向包含当前天气预报的 URL 发出请求,我可以成功地控制台记录 JSON 数据,但我不知道如何将这些数据传递给 .ejs看法?例如,仅提取温度或天气状况以便我可以将其显示在 div 中?一直在谷歌搜索,但没有成功!我在下面包含了我的 index.js 文件和 index.ejs 文件。提前致谢!

var express = require('express');
var request = require('request');
var app = express();
app.set('view engine', 'ejs');

const url = 'http://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=3a3188bfc5bb7c5d2eff1a4985214289'

request(url, (error, response, body)=> {
if (!error && response.statusCode === 200) {
const info = JSON.parse(body)
console.log("Temp: ", info)
} else {
console.log("Got an error: ", error, ", status code: ", response.statusCode)
}

app.get('/', function(req, res){
res.render('index', {info});
});

});

app.listen(8010);
console.log('8010 is the running port');


<!DOCTYPE html>
<html lang="en">
  <body class="container">

    <header>
      <% include ../partials/header %>
    </header>

    <main>
      <div class="jumbotron">
        <% info.main.temp %>
      </div>
    </main>

    <footer>
     <% include ../partials/footer %>
    </footer>
  </body>
</html>

【问题讨论】:

  • 你可以试试res.render('index', {info: info});

标签: javascript json node.js ejs


【解决方案1】:

您应该反转嵌套 - 换句话说,在请求侦听器的主体中向天气 API 发出请求。这样,每次有人请求索引页面 ('/') 时,页面都会填充最新的天气:

var express = require('express');
var request = require('request');
var app = express();
app.set('view engine', 'ejs');

const url = 'http://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=3a3188bfc5bb7c5d2eff1a4985214289';

app.get('/', function(req, res) {
  request(url, function(error, response, body) {
    const info = JSON.parse(body);
    res.render('index', { info });
  });
});

【讨论】:

    【解决方案2】:

    您正在模板中执行您的 javascript,但您没有将输出返回到 HTML 字符串:

    <main>
      <div class="jumbotron">
        <%# this runs javascript %>
            <% info.main.temp %>
        <%# this returns an HTML string %>
            <%= info.main.temp %>
      </div>
    </main>
    

    来自文档:

    您会注意到 标记内的所有内容都已执行,而 标记内的所有内容都将自身插入到返回的 HTML 字符串中。

    http://www.embeddedjs.com/getting_started.html

    【讨论】:

      【解决方案3】:

      你可以试试这个:

      server.js 中的代码

         var express = require('express');
      var app = express();
      var info = {
          key: "value",
          key1: "value1",
          key2: "value2",
          key3: "value3"
      };
      app.set('view engine', 'ejs');
      app.get('/', function (req, res) {
          res.render('index', {
              info: info
          });
      });
      app.listen(3000);
      

      代码 index.ejs:

      <html>
          <% if(locals.info){ %>   
            <script type='text/javascript'>
            window.infoObject =<%-JSON.stringify(info)%>;
             console.log( window.infoObject);
         </script>
          <%}%>
          <body>
              <div> <% if(locals.info){ %> 
            <%=JSON.stringify(info)%>;
            <%=info.key%>;
       <%}%></div>
          </body>
      </html>
      

      【讨论】:

        猜你喜欢
        • 2016-10-06
        • 2018-04-09
        • 2020-04-26
        • 1970-01-01
        • 1970-01-01
        • 2014-06-30
        • 1970-01-01
        • 2018-12-02
        • 1970-01-01
        相关资源
        最近更新 更多