我正在尝试使用node.js渲染部分内容。这是我的代码。
app.js:
var express = require('express')
, routes = require('./routes');
var app = module.exports = express.createServer();
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
// Routes
app.get('/', routes.index);
var products = require('./products.js');
app.get('/products', function(req, res) {
res.render('products/index', {locals: {
products: products.all
}
});
});
app.listen(3000);
当我转到localhost:3000 /产品时,它应该呈现index.jade,它位于views文件夹中的products文件夹中。以上我使用app.set('views', __dirname + '/views');
设置了views目录
index.jade:
h1 Products:
#products!= partial('partials/product', {collection: products})
这应该使部分等效于(partials / product.jade),因为jade是我的视图引擎。
我收到一条错误,说“部分未定义”
任何帮助都会很棒。感谢
更新:
这解决了我的部分错误谢谢。我重新安装了2.5.9。
答案 0 :(得分:8)
检查您安装的Express JS的版本 - 您可能拥有3.0 alpha:
$ npm ls
...
└─┬ express@3.0.0alpha1
...
如果您对尝试使用alpha感兴趣,请务必查看Migrating from 2.x to 3.x上的文档。在其中,您会注意到res.partial()
和partial()
(在模板中)已被删除 - 如“查看系统更改:”中所述
删除“布局”的概念& Express 3.x模板引擎中的partials可以更好地控制文件I / O.这意味着更容易与模板引擎集成,并大大简化了视图系统的内部结构。
您可以在链接文章Use Jade blocks, not layouts中看到意图的示例。
如果您不感兴趣,请确保安装了2.x.
$ npm install express@2.x
或通过package.json
:
{
...
"dependencies": {
...
"express": "2.x"
}
}