2016-11-17 3 views
0

Ich rendere eine Seite, wo ich Daten "userInfo" übergeben aber manchmal rendern und manchmal zeigt es diese ReferenceError, nicht sicher Warum? Meine Frage ist, ob es einen Fehler gibt, dann sollte es überhaupt nicht funktionieren. Wie kann ich es reparieren?Express-EJS-Layout kann manchmal Passing-Argument nicht erkennen

<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 boolean Wert über userinfo ist übergeben.

+0

'video_Data' ist möglicherweise nicht gefüllt, wenn Sie' res.render' aufrufen. – noisypixy

+0

@noisypixy, wenn ich 5 mal neu laden dann 3 mal erfolgreich andere 2 mal fehlgeschlagen zeigt diesen Fehler. Wie kann ich mit dieser Situation umgehen und beheben? – motiur

Antwort

0

Ich habe die Antwort bekommen. @noisypixy du hast Recht meine video_Data wurde nicht korrekt ausgefüllt. Wenn ich meine Ansicht rendere wurden manchmal Videodaten nicht. Also habe ich meinen Code geändert, jetzt funktioniert es wie erwartet.

 


    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}); 

     } 

     } 

     }); 


     } 
     }); 



    }); 

Verwandte Themen