web-dev-qa-db-ja.com

ejs「一部が定義されていません」

さて、私はほとんど静的なホームページを持っていますが、ナビゲーションやフッターなどのための部分的なビューを作りたかったのです。私はejsを使用しており、次のようになります。

私のコントローラー:home.js

// Dependencies
var express = require('express');


    module.exports = {
        get: function(req, res) {
            app.set('view engine', 'ejs');  
            var model = {
            layout:'home',
                    };


            res.render('home');


        }
    };

私のビューディレクトリには、すべての.ejsのナビ、ホーム、フッターがあります

次に、テキストを取り除いた実際のhtmlファイルは次のようになります。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" >
<title>Tom Jones</title>

<!-- CSS -->
<link rel="stylesheet" href="/css/home.css" type="text/css" media="screen" >

</head>
<body>

<%- partial('nav') %>

<!--content part -->  
<div id="showcontainer">
        <section>

        </section>
</div>

<div id="maincontainer">
        <section>

        </section>
</div>

</body>
</html>

問題私がそれをテストするときはいつでも、エラーの部分が定義されていません。 ejsを要求してみましたが、成功しませんでした。

28
lostAstronaut

@Pickelsが言ったように、Partialは3.xで削除されました。ただし、最新バージョンのEJSには、「include」と呼ばれる「部分」を含めるためのメカニズムが用意されています。

https://github.com/visionmedia/ejs#includes

インクルードは、includeステートメントを含むテンプレートに関連しています。たとえば、「./ views/users.ejs」と「./views/user/show.ejs」がある場合、<%include user/show%>を使用します。インクルードされるファイルは文字通りテンプレートにインクルードされ、IOはコンパイル後に実行されないため、ローカル変数はこれらのインクルードされたテンプレートで使用できます。

以下は、古いpartial()関数の代わりとして機能します。 Express 3.xを完全にサポートするには、他の場所で微調整を行う必要がありますが、ほとんどの場合、これはうまく機能しているようです(実際には、コードが少なくパフォーマンスが高い)。

<% include nav.ejs %> <!-- replaces your old <%- partial('nav') %> -->
56
Joshua

一部は3.xで削除されました。パーシャルを提供するのはテンプレートエンジン次第です。

4
Pickels