2016-04-02 31 views
0

Ich versuche, mehrere Ansichten in der Nodejs (expressjs) App zu setzen.TypeError: Kann die Eigenschaft 'Lookup' von undefined nicht lesen

Reference link

Ich habe diesen Fehler, wenn node server Befehl im Terminal ausführen.

TypeError: Cannot read property 'lookup' of undefined

in dieser Linie

var lookupProxy = express.view.lookup;

Was mit meinem Code falsch ist! hier ist mein server.js:

var express   = require('express'); 
var app     = express(); 
var bodyParser  = require('body-parser'); 


enableMultipleViewFolders(express); 
app.set('views', [__dirname + '/admin/views', __dirname + '/client/views']); 
app.engine('html', require('ejs').renderFile); 

app.use(bodyParser.urlencoded({extended:true})); 
app.use(bodyParser.json()); 


app.listen(port, function(){ 
     console.log('Listening on port ' + port); //Listening on port 8888 
}); 

    app.get('/', function (req, res) { 
    res.render('index.html'); 
    }); 


    app.get('/partials/:name', function (req, res) { 
    console.log(req.params.name); 
    res.render('partials/' + req.params.name); 
    }); 


    function enableMultipleViewFolders(express) { 
    // proxy function to the default view lookup 
    var lookupProxy = express.view.lookup; 

    express.view.lookup = function (view, options) { 
     if (options.root instanceof Array) { 
      // clones the options object 
      var opts = {}; 
      for (var key in options) opts[key] = options[key]; 

      // loops through the paths and tries to match the view 
      var matchedView = null, 
       roots = opts.root; 
      for (var i=0; i<roots.length; i++) { 
       opts.root = roots[i]; 
       matchedView = lookupProxy.call(this, view, opts); 
       if (matchedView.exists) break; 
      } 
      return matchedView; 
     } 

     return lookupProxy.call(express.view, view, options) 
    }; 
} 
+0

Sieht wieder auf Ihren Referenzlink. Sie übergeben das falsche Objekt an die enableMultipleViewFolders-Funktion. Entsprechend dieser Antwort und in Kombination mit Ihrem Code sollten Sie 'enableMultipleViewFolders (express);' schreiben und die 'app' nicht übergeben. –

+0

Ihr Express-Modul hat keine View-Eigenschaft. Von dem, was ich in Ihrem Verweis-Link gesehen habe, ist die Antwort für Express-Version 2. Ich nehme an, dass Sie Version 4 verwenden. Sie könnten stattdessen einen Ansichtsprototyp von app.get ('view') erhalten. –

Antwort

0

Der Fehler tritt auf, da die Express-Modul für Express 4 keine view Eigenschaft hat.

Um das Problem zu beheben, müssen Sie die benutzerdefinierte Funktion zum Aktivieren mehrerer Ansichten entfernen. Dies liegt daran, dass Express 4 bereits mehrere Ansichten unterstützt. Siehe dieses Problem: multiple view folders for Express

Verwandte Themen