首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EJS替代PHP die()

EJS替代PHP die()
EN

Stack Overflow用户
提问于 2021-02-23 22:26:10
回答 3查看 246关注 0票数 0

我只想知道是否有办法在EJS视图中复制此PHP代码:

代码语言:javascript
复制
<?php
  // ...
  if ($something) {
    echo 'something is true';
    die;
  }
  // Now I can continue with my code without being in "else" clause.

我觉得有很简单的解决办法,但我似乎找不到。

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-02-26 14:56:48

不太确定这是否是个好主意,但在JavaScript中最接近所需语法的方法是使用一个标记块:

代码语言:javascript
复制
myLabel: if(true) {
  console.log('before break');
  break myLabel;
  console.log('after break');
}

运行这个示例,您可以看到“在中断之前”日志,但是“之后中断”没有。

请注意,我不容忍这种模式,并且中断不会影响标记块之外的任何代码。

票数 0
EN

Stack Overflow用户

发布于 2021-02-23 23:10:31

没有JavaScript,因此也没有等同于PHP的出口()或别名模()的EJS。来自PHP文档的这两个PHP函数的用途:

输出消息并终止当前脚本

在JavaScript中没有“终止当前脚本”的方法。JavaScript总是运行到完成,没有办法阻止它。

实现目标的另一种方法是使用includefilename选项,或者使用renderFile()呈现此模板。

代码语言:javascript
复制
<% if (!something) { %>
   <%- include('/notSomethingContent'); %>
<% } else { %>
   <%- include('/somethingContent', {something: something}); %>
<% } %>

这将使您能够避免您“只是不喜欢”的else中的长缩进模板内容。:-)

票数 0
EN

Stack Overflow用户

发布于 2022-06-17 18:56:17

这是没有文档的,但是EJS只是将您的模板编译成返回呈现内容的JS函数。它添加了一个名为__output的变量,该变量包含当前的输出。参见这里的EJS源代码:https://github.com/mde/ejs/blob/820855ad75034e303be82c482c5eb8c6616da5c5/lib/ejs.js#L589

因此,如果您可以依赖这两种无文档的行为(__output和EJS编译成一个函数),那么只需使用return __output;作为die();

这是:

代码语言:javascript
复制
one
<% return __output; %>
two

将只呈现one

若要仅依赖第一个无文档的行为,可以在模板中抛出一个特殊异常,然后由呈现函数捕获该异常。但是,您仍然需要__output,因为否则无法获得部分生成的输出。就像这样:

代码语言:javascript
复制
class StopEJSError extends Error {};
const die = (output) => {
  const err = new StopEJSError();
  err._output = output;
  throw err;
};
ejs.renderFile("template.ejs", {die}, (err, out) => {
  if (err instanceof StopEJSError) {
    res.send(err.output);
  } else if (err) {
    throw err;
  } else res.send(out);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66342008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档