在ejs模板中检查未定义的变量

时间:2018-12-31 05:38:08

标签: node.js express ejs

我将api天气数据传递到我的ejs模板。我有一个条件语句来检查是否存在任何api数据。无论如何,我总是会遇到以下错误:

  

无法读取未定义的属性“ temps”

条件语句,如果在脚本标签中。

<script>


    if ( JSON.parse('<%-locals.forecast.temps[0]%>') != undefined){

    console.log('there is data');


    var height = 500;
    var width = 800;
    var margins = {
        left: 40,
        top: 40,
        right: 40,
        bottom: 40
    }



            var barData = [
                {strength:JSON.parse('<%-locals.forecast.temps[0]%>')},
                {strength:JSON.parse('<%-locals.forecast.temps[1]%>')},
                {strength:JSON.parse('<%-locals.forecast.temps[2]%>')},
                {strength:JSON.parse('<%-locals.forecast.temps[3]%>')},
                {strength:JSON.parse('<%-locals.forecast.temps[4]%>')},
                {strength:JSON.parse('<%-locals.forecast.temps[5]%>')},
                {strength:JSON.parse('<%-locals.forecast.temps[6]%>')},
                {strength:JSON.parse('<%-locals.forecast.temps[7]%>')},
                {strength:JSON.parse('<%-locals.forecast.temps[8]%>')},
                {strength:JSON.parse('<%-locals.forecast.temps[9]%>')},
            ]

1 个答案:

答案 0 :(得分:0)

事实证明,脚本标记在服务器呈现ejs模板后在客户端运行。因此,即使locals.forecast.temps [0]可以在script标记之外运行,也不能在script标记内运行。我最终创建了一个单独的变量,该变量在模板引擎运行时存储服务器端的值,然后将该变量传递给脚本客户端,以便无需返回服务器即可对其进行访问。

ejs模板中脚本标签之外。...

<% var forecast_data = locals.forecast.temps  %>

在脚本标签内...

var get_forecast_data = '<%= forecast_data %>'

此帖子很有帮助:Can a js script get a variable written in a EJS context/page within the same file

相关问题