首页 > 解决方案 > EJS ReferenceError:未定义success_msg

问题描述

我目前正在为我的学校开发一个具有登录和管理功能的图书馆网站。一般来说,我是 node.js 和 EJS 的新手,最近我几乎重新设计了有关路由和页面服务的所有内容,以使用 EJS 和 express。为了实现用户反馈,我想使用 Flash 消息。

这是详细的错误:

ReferenceError: C:\Users\Juli\Documents\Git\gt-db\views\index.ejs:15
    13|   </div>
    14| </nav>
 >> 15| <%- include ("./partials/messages.ejs") %>
    16| <div class="rect" id="rect">
    17|   <i class="fas fa-user-circle"></i>
    18|   <h1>Willkommen</h1>

C:\Users\Juli\Documents\Git\gt-db\views\partials\messages.ejs:1
 >> 1| <% if(typeof errors != 'undefined'){ %> <% errors.forEach(function(error) { %>
    2|     <div class="alert alert-warning alert-dismissible fade show" role="alert">
    3|       <%= error.msg %>
    4|       <button type="button" class="close" data-dismiss="alert" aria-label="Close">

success_msg is not defined
    at eval (C:\Users\Juli\Documents\Git\gt-db\views\partials\messages.ejs:22:8)
    at messages (C:\Users\Juli\Documents\Git\gt-db\node_modules\ejs\lib\ejs.js:691:17)
    at include (C:\Users\Juli\Documents\Git\gt-db\node_modules\ejs\lib\ejs.js:689:39)
    at eval (C:\Users\Juli\Documents\Git\gt-db\views\index.ejs:12:17)
    at index (C:\Users\Juli\Documents\Git\gt-db\node_modules\ejs\lib\ejs.js:691:17)
    at tryHandleCache (C:\Users\Juli\Documents\Git\gt-db\node_modules\ejs\lib\ejs.js:272:36)
    at View.exports.renderFile [as engine] (C:\Users\Juli\Documents\Git\gt-db\node_modules\ejs\lib\ejs.js:489:10)
    at View.render (C:\Users\Juli\Documents\Git\gt-db\node_modules\express\lib\view.js:135:8)
    at tryRender (C:\Users\Juli\Documents\Git\gt-db\node_modules\express\lib\application.js:640:10)
    at Function.render (C:\Users\Juli\Documents\Git\gt-db\node_modules\express\lib\application.js:592:3)
    at ServerResponse.render (C:\Users\Juli\Documents\Git\gt-db\node_modules\express\lib\response.js:1012:7)
    at ServerResponse.res.render (C:\Users\Juli\Documents\Git\gt-db\node_modules\express-ejs-layouts\lib\express-layouts.js:77:18)
    at C:\Users\Juli\Documents\Git\gt-db\routes\index.js:6:35
    at Layer.handle [as handle_request] (C:\Users\Juli\Documents\Git\gt-db\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\Juli\Documents\Git\gt-db\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:\Users\Juli\Documents\Git\gt-db\node_modules\express\lib\router\route.js:112:3)
    

这是代码:

    <div class="alert alert-warning alert-dismissible fade show" role="alert">
      <%= error.msg %>
      <button type="button" class="close" data-dismiss="alert" aria-label="Close">
        <span aria-hidden="true">&times;</span>
      </button>
    </div>
    <% }); %> <% } %> <% if(success_msg != ''){ %>
    <div class="alert alert-success alert-dismissible fade show" role="alert">
      <%= success_msg %>
      <button type="button" class="close" data-dismiss="alert" aria-label="Close">
        <span aria-hidden="true">&times;</span>
      </button>
    </div>
    <% } %> <% if(error_msg != ''){ %>
    <div class="alert alert-danger alert-dismissible fade show" role="alert">
      <%= error_msg %>
      <button type="button" class="close" data-dismiss="alert" aria-label="Close">
        <span aria-hidden="true">&times;</span>
      </button>
    </div>
    <% } %> <% if(error != ''){ %>
    <div class="alert alert-danger alert-dismissible fade show" role="alert">
      <%= error %>
      <button type="button" class="close" data-dismiss="alert" aria-label="Close">
        <span aria-hidden="true">&times;</span>
      </button>
    </div>
    <% } %>```

标签: javascriptnode.jsexpressejs

解决方案


看起来你只需要改变:

if(success_msg != '')

if (typeof success_msg !== 'undefined' && success_msg !== '')

正如您在下面看到typeof的,即使变量不存在也可以使用,但尝试使用它会引发错误:

if (typeof success_msg !== 'undefined') {
    console.log('it exists');
}

console.log('typeof works');

if (success_msg !== '') {
    console.log('it exists');
}

console.log('equality check doesnt');


推荐阅读