ExpressJS在静态目录中查找视图,忽略视图目录

时间:2013-04-09 20:41:15

标签: node.js express cloud9-ide

根据ExpressJS application settings documentation,您应该能够将views设置为视图引擎的目录。我正在经历我认为可能是一个错误;而不是查看views目录,快速查看static目录。显然它失败了,因为它不在那里。我已经通过将视图移动到静态目录中来确认这一点,并且错误消失了。

您可以通过克隆this Cloud9 project来查看此错误。我无法在Cloud9之外确认这个错误,(我没有可用的Linux机箱)。

目录结构很简单

项目

|-client
  |-assets
  |-views
    |-index.html
|-server.js

这是服务器配置

var viewDir = __dirname + '/client/views/';
var assetDir = __dirname + '/client/assets/';

//Configure
app.configure(function() {
    app.set('views', viewDir);
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(express['static'](assetDir));
    app.use(app.router);
});

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

2 个答案:

答案 0 :(得分:4)

您需要通过设置引擎来告诉它如何渲染。

如echo:

app.engine('.html', function (file, options, next) {
  fs.readFile(file, function (err, data) {
    if (err) {
      next(err);
    } else {
      next(null, data.toString());
    }
  });
});

如果您希望app.get('/' . . .占据主席,您还需要app.use(express.static。{/ p>

您可以在此处试用:http://runnable.com/UWTRSNJq0z5OAADk

答案 1 :(得分:2)

Html文件是静态文件,而视图中的文件必须由模板引擎呈现,如jade或ejs。如果要渲染html文件,请检查这些问题。

  1. Render basic HTML view?
  2. Using express without a template engine
  3. 模板引擎动态呈现视图。如果你只有静态页面,那么你就不需要了。但如果您有动态内容,则必须使用模板。