TypeError:无法读取属性' lookup'未定义的

时间:2016-04-02 12:23:44

标签: javascript node.js express

我试图在Nodejs(expressjs)app中设置多个视图。

Reference link

在终端中运行node server命令时出现此错误。

TypeError: Cannot read property 'lookup' of undefined

在这一行

var lookupProxy = express.view.lookup;

我的代码出了什么问题!这是我的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)
    };
 }

1 个答案:

答案 0 :(得分:0)

发生错误是因为Express 4的express模块​​没有view属性。

要解决此问题,您需要删除自定义功能以启用多个视图。这是因为Express 4已经支持多个视图。请参阅此问题:multiple view folders for Express