Проверка неопределенной переменной в шаблоне ejs - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть данные о погоде 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 голосов
/ 03 января 2019

Оказывается, что тег script запускается на стороне клиента после того, как сервер отобразит шаблон ejs.Поэтому, хотя locals.forecast.temps [0] будет работать вне тега script, он не будет работать внутри.Я закончил тем, что создал отдельную переменную, которая хранит значения на стороне сервера при запуске механизма шаблонов, а затем передает эту переменную на сторону клиента сценария, чтобы она была доступна без необходимости возвращаться на сервер.

За пределамитег script внутри шаблона ejs ....

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

Внутри тега script ...

var get_forecast_data = '<%= forecast_data %>'

Этот пост был полезен: Может ли скрипт js получить написанную переменнуюв контексте / странице EJS в том же файле

...