web-dev-qa-db-ja.com

NodeJs-escは関数ではありません

この特定の行で。ejsファイルをレンダリングしようとすると、奇妙な問題が発生しました

TypeError: /home/me/nodeapp/app/views/default/page/connection.ejs:66
        64|         <div class="col s12 l8">
        65|             <ul class="collapsible popout" data-collapsible="accordion"">
     >> 66|                 <%- include ../api_html/connection/connection_list.ejs %>
        67|             </ul>
        68|         </div>

これがエラーです

escは関数ではありません

このエラーがどこから来ているのか本当にわかりません。 esc関数を使用していません../api_html/connection/connection_list.ejs含まれているファイル。

これに加えて、ローカルサーバー(Windowsの場合)でこの問題が発生していません。このエラーは、まったく同じnodeappを実行しているCentOsサーバーで発生します。

どんなアイデアでも大歓迎です!

ありがとう!

9
Dash

あなたの答えに最初に感謝します。

私はその問題を理解しました。

エラーは、含まれているEJS file<%- include ('../api_html/connection/connection_list.ejs') %>にありました。

たとえば、<% include ../partials/header %>を含む<%= user.email %>を含めると、ユーザーが定義されている場合(ユーザーがログインしている場合)は完全に機能しますが、定義されていない場合はesc in not a functionをスローします。

17
Dash

@Dashが質問に答えたように、.ejsテンプレートに未定義の変数がある場合に発生します。この変数を見つけるにはトリッキーな方法があります。その方法は、テンプレートコードをejsファイルに直接配置することです。アプリを実行すると、未定義の変数を確認できます。たとえば、index.ejsがあり、このファイルにテンプレート<%include partials/_pagination.ejs %>が含まれていると仮定します。このエラーが発生した場合は、インデックスの_paginationファイル内のコードをコピーして貼り付け、アプリを実行して未定義の変数を見つけてください。

コメントする評判がないので....同じ症状が見られました。私の場合、「Express In Action」のセクション8のサンプルから、誤って「currentUser.name」を「currentUser.Name」(大文字の「N」)に変更しました。

routers.jsで

var passport = require( "passport" );
router.use( function( req, res, next ) {
    res.locals.currentUser = req.user;
}

views/_header.ejs

<a href="/edit">
    Hello <%= currentUser.Name() %>
</a>

「currentUser.name」に戻すと、TypeErrorが消えました

0
The PHM