0
votes

I am rendering a page where I am passing data "userInfo" but sometimes it render and sometimes it shows this ReferenceError, not sure Why? My question is if there have any mistake then it should not work at all. How can I fix it?

<pre>  

    ReferenceError: /Users/user/Desktop/iSlamic/views/layout.ejs:77
       75|                     </li>
       76|                     
    >> 77|                          if(userInfo)
       78|                  <li class="dropdown">
       79|                         <a href="#" class="dropdown-toggle" data-toggle="dropdown">Motiur<b class="caret"></b></a>
       80|                         <ul class="dropdown-menu">

    userInfo is not defined
       at eval (eval at <anonymous> (/Users/user/Desktop/iSlamic/node_modules/ejs/lib/ejs.js:491:12), <anonymous>:11:10)
       at returnedFn (/Users/user/Desktop/iSlamic/node_modules/ejs/lib/ejs.js:520:17)
       at View.exports.renderFile [as engine] (/Users/user/Desktop/iSlamic/node_modules/ejs/lib/ejs.js:374:31)
       at View.render (/Users/user/Desktop/iSlamic/node_modules/express/lib/view.js:126:8)
       at tryRender (/Users/user/Desktop/iSlamic/node_modules/express/lib/application.js:639:10)
       at EventEmitter.render (/Users/user/Desktop/iSlamic/node_modules/express/lib/application.js:591:3)
       at ServerResponse.render (/Users/user/Desktop/iSlamic/node_modules/express/lib/response.js:961:7)
       at /Users/user/Desktop/iSlamic/node_modules/express-ejs-layouts/lib/express-layouts.js:108:14
       at View.exports.renderFile [as engine] (/Users/user/Desktop/iSlamic/node_modules/ejs/lib/ejs.js:379:10)
       at View.render (/Users/user/Desktop/iSlamic/node_modules/express/lib/view.js:126:8)
       at tryRender (/Users/user/Desktop/iSlamic/node_modules/express/lib/application.js:639:10)
       at EventEmitter.render (/Users/user/Desktop/iSlamic/node_modules/express/lib/application.js:591:3)
       at ServerResponse.render (/Users/user/Desktop/iSlamic/node_modules/express/lib/response.js:961:7)
       at ServerResponse.res.render (/Users/user/Desktop/iSlamic/node_modules/express-ejs-layouts/lib/express-layouts.js:77:12)
       at /Users/user/Desktop/iSlamic/app.js:97:7
       at Layer.handle_error (/Users/user/Desktop/iSlamic/node_modules/express/lib/router/layer.js:71:5)}

</pre>

<%if(userInfo){%>
                 <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Motiur<b class="caret"></b></a>
                        <ul class="dropdown-menu">
                            <li>
                                <a href="/admin/insert">Insert</a>
                            </li>
                            <li>
                                <a href="/admin/update">Update</a>
                            </li>
                            <li>
                                <a href="/admin/delete">Delete</a>
                            </li>
                            <li>
                                <a  href="/logout">Logout</a> 
                            </li>
                        </ul>
                    </li>
                     <% }else{ %>  
                     <li>
                      <a  href="/admin/login">Login</a> 
                      </li>
                    <%}%>
          
My js file <pre> router.get('/speaker/:name', function(req, res, next) { var video_Data; was.find({"name":req.params.name, "wasType":"video"}).sort({_id:-1}).limit(5).exec(function(err,videoDocs){ if(err) { res.json(err) mongoose.connection.close(); } else { video_Data = videoDocs; } }); //var audioData; was.find({"name":req.params.name, "wasType":"audio"}).sort({_id:-1}).limit(5).exec(function(err,docs){ if(err) { res.json(err); mongoose.connection.close(); } else { if(video_Data==null&&docs==null) { res.json("Data does not exist"); }else{ res.render('video2', {"data":docs,"videoData": video_Data,"userInfo":req.session.admin}); } } }); });

I am passing boolean value via userInfo.

1
video_Data might not be populated when you call res.render.noisypixy
@noisypixy , if I reload 5 times then 3 times load successfully other 2 times failed shows that error. How can I handle this situation and fix it?motiur

1 Answers

0
votes

I got the answer. @noisypixy you are right my video_Data was not populated correctly. When I render my view sometimes video data was not getting. So I changed my code now it works as expected.



    router.get('/speaker/:name', function(req, res, next) {

      var video_Data;

      was.find({"name":req.params.name, "wasType":"video"}).sort({_id:-1}).limit(5).exec(function(err,videoDocs){

      if(err)
      {
        res.json(err)
              mongoose.connection.close();
      }
      else
      {

        video_Data = videoDocs;

        was.find({"name":req.params.name, "wasType":"audio"}).sort({_id:-1}).limit(5).exec(function(err,docs){
        if(err)
      {
              res.json(err);
              mongoose.connection.close();
      }
      else
      {
        if(video_Data==null&&docs==null)

         {
          res.json("Data does not exist");
         }else{
          res.render('video2', {"data":docs,"videoData": video_Data,"userInfo":req.session.admin});

         }

      }

      });


      }
      });



    });