Ошибка ссылки с ejs и nodejs - PullRequest
0 голосов
/ 13 мая 2018

Я использую EJS. У меня есть два вложенных цикла forEach, и я пытаюсь сравнить, имеют ли два массива одинаковые значения, и если они устанавливаются, я устанавливаю переменную с именем условие равной 0, а если условие не равно 1. Вот необходимый код.

 <% events.forEach(function(event){ %>
       <% var condition = 1; %>
        <%  userEvents.forEach(function(userEvent){ %>
            <%  if(String(event._id) ==  String(userEvent)) condition = 0; }) %>

    <%  if(event.pointType == "Social"){ %>

Переменная userEvents и события передаются из файла app.js, который содержит маршрут, и обе переменные работают нормально. Ошибка, которую я получаю, заключается в том, что userEvent (значение внутри функции) не определено. По какой-то причине, когда я меняю следующее:

 <%  if(event.pointType == "Social"){ %> 

до

` <%  if(true){ %>`

Вот маршрут:

    //INDEX - show all events
app.get("/event",isLoggedIn,function(req, res) {
    var firstName = req.user.firstName;
    var lastName = req.user.lastName;
    var subcommittee = req.user.subcommittee;
    var userEvents = req.user.events; 

  Event.find({}, function(err, events){
       if(err){
           console.log(err);
       } else {
          res.render("viewEvents",{userEvents:userEvents,events:events,firstName:firstName,lastName:lastName,subcommittee:subcommittee});
       }
    });
});

Код выполняется, но не полностью соответствует своему предполагаемому поведению. Вот сообщение об ошибке:

    ReferenceError: /home/ubuntu/workspace/views/viewEvents.ejs:25
    23|                 <%  if(String(event._id) ==  String(userEvent)) condition = 0; }) %>
    24|         
 >> 25|         <%  if(event.pointType == "Social"){ %>
    26|               
    27|             <div class="ui clearing red raised segment">
    28|                <% if(condition == 1) { %>



        userEvent is not defined
            at eval (eval at compile (/home/ubuntu/workspace/node_modules/ejs/lib/ejs.js:549:12), <anonymous>:111:69)
            at Array.forEach (native)
            at eval (eval at compile (/home/ubuntu/workspace/node_modules/ejs/lib/ejs.js:549:12), <anonymous>:24:15)
            at returnedFn (/home/ubuntu/workspace/node_modules/ejs/lib/ejs.js:580:17)
            at tryHandleCache (/home/ubuntu/workspace/node_modules/ejs/lib/ejs.js:223:34)
            at View.exports.renderFile [as engine] (/home/ubuntu/workspace/node_modules/ejs/lib/ejs.js:437:10)
            at View.render (/home/ubuntu/workspace/node_modules/express/lib/view.js:135:8)
            at tryRender (/home/ubuntu/workspace/node_modules/express/lib/application.js:640:10)
            at EventEmitter.render (/home/ubuntu/workspace/node_modules/express/lib/application.js:592:3)
            at ServerResponse.render (/home/ubuntu/workspace/node_modules/express/lib/response.js:1008:7)
            at /home/ubuntu/workspace/app.js:197:15


 at /home/ubuntu/workspace/node_modules/mongoose/lib/model.js:4161:16
        at process.nextTick (/home/ubuntu/workspace/node_modules/mongoose/lib/services/query/completeMany.js:35:39)
        at _combinedTickCallback (internal/process/next_tick.js:73:7)
        at process._tickCallback (internal/process/next_tick.js:104:9)

Я не совсем понимаю, почему ошибка указывает на строку 25, в которой даже не используется переменная userEvent.

1 Ответ

0 голосов
/ 13 мая 2018

попробуйте изменить

<%  if(String(event._id) ==  String(userEvent)) condition = 0; }) %>

на:

<%  if((typeof userEvent!= "undefined" && String(event._id) ==  String(userEvent))) condition = 0; }) %>
...