NodeJs - esc不是一个函数

时间:2017-03-09 15:44:14

标签: node.js ejs

尝试在此特定行渲染 .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服务器下触发的。

任何想法都会非常感激!

谢谢!

3 个答案:

答案 0 :(得分:17)

首先感谢您的回答。

我想出了这个问题。

错误发生在所包含的EJS文件<%- include ('../api_html/connection/connection_list.ejs') %>中。

例如,如果您包含<% include ../partials/header %>包含<%= user.email %>,则在定义用户(用户已登录)时它将完美运行,但在esc in not a function时会抛出{{1}}。不是。

答案 1 :(得分:2)

当@Dash回答了这个问题,当你在.ejs模板中有一个未定义的变量时会发生这种情况。找到这个变量有一个棘手的方法,这样做的方法是将模板代码直接放在你的ejs文件中,现在当你运行你的应用程序时,你可以看到未定义的变量。 例如,假设您有index.ejs,并在此文件中包含模板<%include partials/_pagination.ejs %>。现在,如果您遇到此错误,只需复制并浏览索引中_pagination文件中的代码,然后运行您的应用程序以查找未定义的变量。

答案 2 :(得分:0)

我没有评论的声誉....我只是看到了相同的症状。在我的情况下,我不小心将“currentUser.name”改为“currentUser.Name”(大写“N”),来自“Express In Action”一书中的一个样本,第8节。

在routes.js中

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

视图/ _header.ejs

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

当我改回“currentUser.name”时,TypeError消失了