当前位置: 首页 > 面试题库 >

检查EJS模板中变量是否存在的正确方法是什么(使用ExpressJS)?

能业
2023-03-14
问题内容

在EJS github页面上,只有一个简单的示例:https :
//github.com/visionmedia/ejs

<% if (user) { %>
    <h2><%= user.name %></h2>
<% } %>

这似乎是在检查是否存在名为user的变量,如果存在,请执行一些操作。h,对不对?

我的问题是,如果用户变量不存在,为什么世界上Node会抛出ReferenceError?这使上面的示例无效。检查变量是否存在的适当方法是什么?我是否应该使用try
/ catch机制并抓住那个ReferenceError?

ReferenceError: user is not defined
    at IncomingMessage.anonymous (eval at <anonymous> (/usr/local/lib/node/.npm/ejs/0.3.1/package/lib/ejs.js:140:12))
    at IncomingMessage.<anonymous> (/usr/local/lib/node/.npm/ejs/0.3.1/package/lib/ejs.js:142:15)
    at Object.render (/usr/local/lib/node/.npm/ejs/0.3.1/package/lib/ejs.js:177:13)
    at ServerResponse.render (/usr/local/lib/node/.npm/express/1.0.7/package/lib/express/view.js:334:22)
    at Object.<anonymous> (/Users/me/Dropbox/Projects/myproject/server.js:188:9)
    at param (/usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:146:21)
    at pass (/usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:162:10)
    at /usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:152:27
    at Object.restrict (/Users/me/Dropbox/Projects/myproject/server.js:94:5)
    at param (/usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:146:21)

我知道我可以通过在服务器代码中简单地添加一个“用户”本地变量来消除此错误,但是这里的全部要点是我想使用您每天的if /
else来在运行时检查此类变量是否存在nullcheck类型模式。对于一个不存在的变量,异常对我来说似乎很可笑。


问题答案:

您可以使用js中的任何方法来执行此操作typeof foo == 'undefined',或者由于“
locals”是包含它们的对象的名称,因此可以这样做if (locals.foo)。只是原始js:p



 类似资料:
  • 问题内容: 我有一个Freemarker模板,其中包含一堆占位符,在处理模板时会为其提供值。如果要提供userName变量,我想有条件地包括模板的一部分,例如: 但是,FreeMarker手册似乎表明if_exists已过时,但是我找不到其他方法来实现这一目标。当然,我可以简单地提供一个额外的布尔变量isUserName,并像这样使用它: 但是,如果有一种方法可以检查userName是否存在,那么

  • 问题内容: 我目前在一个新项目上使用Jade。我想呈现一个页面并检查某个变量是否可用。 : : 我总是收到以下错误: 关于如何解决此问题的任何想法? 问题答案: 这应该工作:

  • 问题内容: 查看URL存在并且响应不是404的最佳方法是什么? 问题答案: 您可以使用 手册中的示例2 : 第一个数组元素将包含HTTP响应状态代码。您必须解析它。 请注意,示例中的函数将发出HTTP HEAD请求,这意味着它将不会获取URL的正文。这比使用GET请求(也将返回正文)更有效。 还要注意,通过设置 默认 上下文,任何使用http流上下文的后续调用现在都将发出HEAD请求。因此,确保完

  • 问题内容: 在UML图上,代表模板类的正确方法是什么? 问题答案: 在右上角带有虚线矩形的普通矩形,代表模板参数。像这样:

  • 我有一个Typescript项目,我需要知道变量的值是否在对象的任何属性中。 这就是目标: 这是声明的变量: 以下是我检查它是否存在的步骤: 问题:做三次检查会在其他机器上运行三次 我需要知道的是,如何检查它是否存在,而不需要迭代对象,如果它不存在,只需操作一次

  • 问题内容: 我正在与我的CompSci教授交谈,他建议将所有String 方法编写为: 而不是: 这两行都可以编译,但是我想知道第一种方法的好处是什么?我一直都是后一种方式。错了吗 什么是普通/常规? 问题答案: 第一种方法确保执行比较时不会收到 NullPointerException 。当您尝试在不存在的对象上调用方法时,抛出(发生)此异常。 以下是一些相关的切线:仔细阅读风险自负 不过要注意