ExpressJS,识别模块结构中的视图

时间:2011-10-29 20:20:37

标签: node.js coffeescript express

我创建了文件:

app.coffee

express  = require('express')
routes   = require('./config/routes')
app      = express.createServer();

require('./config/environment')(app)
require('./config/routes')(app)

app.listen(3000);

配置/ environment.coffee

module.exports = (app) ->
  app.configure = () ->
    # set view path, template engine and defsult layout
    app.set 'view', __dirname + '/views'
    app.set 'view engine', 'jade'
    app.use(app.router)

配置/ routes.coffee

site = require('../controllers/site.js')
module.exports = (app) ->
  app.get '/', site.index

控制器/ site.coffee

exports.index = (req, res) ->
  res.render 'main.jade', {title: 'New Article'}

问题出现在site.coffee文件中,因为当我不写'jade'ExpressJS engin这样的扩展名时,尝试使用'undefined'扩展名打开文件。我怎样才能记住环境文件中的视图引擎?

1 个答案:

答案 0 :(得分:0)

你不应该需要这一行

app.set 'view engine', 'jade'

正如Express docs所说,它只是允许你省略.jade扩展名,例如。

res.render 'main', {title: 'New Article'}

我相信你的问题是

app.set 'view', __dirname + '/views'

您从config/environment.coffee开始运行。 __dirname是特定于文件的,因此您将视图目录设置为config/views - 可能不是您想要的。试着省略那条线;默认值为path.join process.cwd(), 'views',我猜是你真正想要的。

此外,虽然您有关于设置“默认布局”的评论,但我没有看到。因此,如果您仍有问题,可以尝试

res.render 'main.jade', {layout: false}