この特定の行で。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サーバーで発生します。
どんなアイデアでも大歓迎です!
ありがとう!
あなたの答えに最初に感謝します。
私はその問題を理解しました。
エラーは、含まれているEJS file<%- include ('../api_html/connection/connection_list.ejs') %>
にありました。
たとえば、<% include ../partials/header %>
を含む<%= user.email %>
を含めると、ユーザーが定義されている場合(ユーザーがログインしている場合)は完全に機能しますが、定義されていない場合はesc in not a function
をスローします。
@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が消えました