PHP的EJS替代品die()



我只是想知道是否有一种方法可以在EJS视图中复制此PHP代码:

<?php
// ...
if ($something) {
echo 'something is true';
die;
}
// Now I can continue with my code without being in "else" clause.

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

提前感谢。

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

myLabel: if(true) {
console.log('before break');
break myLabel;
console.log('after break');
}

运行示例,您可以看到"before break"原木,但"休息后";没有。

请注意,我不赞成这种模式,并且该断行不会影响标记块之外的任何代码

没有JavaScript,因此没有与PHP的exit()或其别名die()等效的EJS。这两个PHP函数的用途来自PHP文档:

输出消息并终止当前脚本

没有办法终止当前脚本"在JavaScript。JavaScript总是运行到完成,没有办法阻止它。

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

<% if (!something) { %>
<%- include('/notSomethingContent'); %>
<% } else { %>
<%- include('/somethingContent', {something: something}); %>
<% } %>

这将允许您避免else中的长缩进模板内容,因为您不喜欢。: -)

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

因此,如果您愿意依赖这两个未记录的行为(__output和EJS编译成一个函数),您可以简单地使用return __output;作为die();

:

one
<% return __output; %>
two

将只渲染one

要只依赖第一个未记录的行为,您可以在模板中抛出一个特殊的异常,然后由呈现函数捕获。您仍然需要__output,因为没有其他方法可以获得部分生成的输出。像这样:

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);
});

最新更新