通过 ejs 文件中的 javascript 访问 JSON

Posted

技术标签:

【中文标题】通过 ejs 文件中的 javascript 访问 JSON【英文标题】:accessing JSON through javascript in ejs file 【发布时间】:2018-07-18 03:33:04 【问题描述】:

您好,我想通过我的代码解决这个问题。

所以这是我的带有节点 js 的服务器文件

//setup

var express = require("express");
var request = require("request");
var bodyParser = require("body-parser");
var app = express();

//make body-parser workin
app.use(bodyParser.urlencoded(extended: true));
//help excluding ejs extension
app.set("view engine", "ejs");
//pointing express to look at public folders for css files. 
app.use(express.static("public"));


//routing starts
//root directory
app.get("/", function(req, res)
   res.render("home",  data : "" );
);

app.post("/results", function(req, res)
    var mname = req.body.movieName;
    var myear = req.body.movieYear;
    var url = "http://www.omdbapi.com/?s="+mname+"&y="+myear+"&apikey=$$$$$$$$$$$$";
    request(url, function(error, response, body)
    if(!error && response.statusCode == 200)
       var data = JSON.parse(body);
       res.render("home",  data : data );
       console.log(url);
    else
      console.log("ERRRORRRR WARNNNINNNNNNGG");
      console.log(error);
    

    );

这是我想要访问从 API 请求中检索到的 JSON 的 ejs 文件的一部分

<%= data["Search"][0] %>

但是,我收到这样的错误

================================================ ====================== 类型错误:/home/ubuntu/workspace/MovieSearchApp/views/home.ejs:32

32|

Cannot read property '0' of undefined
at eval (eval at compile (/home/ubuntu/workspace/MovieSearchApp node_modules/ejs/lib/ejs.js:549:12), <anonymous>:11:40) 

etc

================================================ ======================

所以我假设我访问 JSON 的方式有些错误,所以我详细查看了我的 JSON

然后我回到我的 ejs 文件并尝试了

<%= data["Search"] %>

它没有给我任何错误并显示为

[object Object]

有人可以指导我如何正确访问这个 JSON 吗?

提前感谢您的时间和帮助

【问题讨论】:

【参考方案1】:

最明显的问题是你在app.get("/",.. 中传递了data: ""

这意味着当您转到您网站的根目录 / 时,data 是一个空字符串。

改成

app.get("/", function(req, res)
   res.render("home");
);

并在视图中检查数据是否存在

<% if (data)  %>

<%  else  %>

<%  %>

【讨论】:

你好摩尔达!当我从 get 请求中删除 data : "" 时,它给我的错误是“数据未定义”。因此,我尝试再次添加该部分,尝试将 console.log(data) 输出(在 JSON.parse(body) 行之后的 POST 请求中),我可以在终端窗口上看到 JSON。所以看起来数据已经从 API 请求中很好地检索到了,但是我不确定如何正确访问它。 问题是您在获取请求中将数据设置为"",然后您尝试访问data['Search'][0],但data['Search']undefined。可以理解它在 app.post 中工作,因为您从 omdbapi.com 检索数据。不过,您并没有在获取请求中这样做。您可以将res.render("home"); 更改为res.render("home", data: Search: [] );,但即使这样也行不通,因为data['Search'][0] 将是未定义的。您不应该尝试访问您不确定存在的变量。 哦!!!!现在我可以看到它。我将尝试将post请求分开在不同的ejs文件中,并在几分钟内通知您!!!!!! 酷,很高兴我能帮上忙

以上是关于通过 ejs 文件中的 javascript 访问 JSON的主要内容,如果未能解决你的问题,请参考以下文章

在Javascript(node.js,express.js,ejs)中访问服务器端变量[关闭]

脚本不会从 nodejs 应用程序中的 ejs 文件运行

无法从 HTML/EJS 文件运行外部 javascript

javascript ejs gulp文件

EJS模板引擎

EJS模板引擎