在node.js中使用带有express的partials

Nic*_*ing 3 javascript partials node.js express pug

我试图使用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);
Run Code Online (Sandbox Code Playgroud)

当我转到localhost:3000 /产品时,它应该呈现index.jade,它位于views文件夹中的products文件夹中.以上我使用views目录设置 app.set('views', __dirname + '/views');

index.jade:

h1 Products:
#products!= partial('partials/product', {collection: products})
Run Code Online (Sandbox Code Playgroud)

这应该使部分等效于(partials/product.jade)因为jade是我的视图引擎.

我收到一条错误,说"部分未定义"

任何帮助都会很棒.谢谢

更新:

这解决了我的部分错误,谢谢.我重新安装了2.5.9.

Jon*_*ski 8

检查您安装的Express JS的版本 - 您可能拥有3.0 alpha:

$ npm ls
...
??? express@3.0.0alpha1
...
Run Code Online (Sandbox Code Playgroud)

如果您对尝试使用alpha感兴趣,请务必查看有关从2.x迁移到3.x的文档.在其中,您将注意到res.partial()并且partial()(在模板内)已被删除 - 如"查看系统更改:"中所述

通过删除Express 3.x模板引擎中"布局"和部分的概念,可以更好地控制文件I/O. 这意味着更容易与模板引擎集成,并大大简化了视图系统的内部.

您可以在链接的文章中看到意图的示例,使用Jade块,而不是布局.

如果您不感兴趣,那么请确保您已安装2.x.

$ npm install express@2.x
Run Code Online (Sandbox Code Playgroud)

或者通过package.json:

{
    ...
    "dependencies": {
        ...
        "express": "2.x"
    }
}
Run Code Online (Sandbox Code Playgroud)