3

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 / productsに移動すると、viewsフォルダーにあるproductsフォルダーにあるindex.jadeがレンダリングされます。上記では、を使用してviewsディレクトリを設定しました。app.set('views', __dirname + '/views');

index.jade:

h1 Products:
#products!= partial('partials/product', {collection: products})

翡翠は私のビューエンジンであるため、これにより部分的に(partials / product.jade)と同等になります。

「部分が定義されていません」というエラーが返されます

どんな助けでも素晴らしいでしょう。ありがとう

アップデート:

それは私の部分的なエラーを解決しましたありがとうございます。2.5.9を再インストールしました。

4

1 に答える 1

8

インストールしたExpressJSのバージョンを確認してください。3.0アルファ版を使用している可能性があります。

$ npm ls
...
└─┬ express@3.0.0alpha1
...

アルファ版の試用に興味がある場合は、2.xから3.xへの移行に関するドキュメントを必ず確認してください。res.partial()その中で、および(テンプレート内で)が削除されていることに気付くでしょうpartial()-「システム変更の表示」で説明されているように。

Express 3.xテンプレートエンジンの「レイアウト」とパーシャルの概念を削除することにより、ファイルI/Oをより細かく制御できるようになります。これは、テンプレートエンジンとの統合がはるかに簡単で、ビューシステムの内部を大幅に簡素化することを意味します。

リンクされた記事「レイアウトではなく、Jadeブロックを使用する」で意図の例を見ることができます。

興味がない場合は、2.xがインストールされていることを確認してください。

$ npm install express@2.x

または経由package.json

{
    ...
    "dependencies": {
        ...
        "express": "2.x"
    }
}
于 2012-04-19T07:05:27.883 に答える