我只想知道是否有办法在EJS视图中复制此PHP代码:
<?php
// ...
if ($something) {
echo 'something is true';
die;
}
// Now I can continue with my code without being in "else" clause.我觉得有很简单的解决办法,但我似乎找不到。
提前谢谢。
发布于 2021-02-26 14:56:48
不太确定这是否是个好主意,但在JavaScript中最接近所需语法的方法是使用一个标记块:
myLabel: if(true) {
console.log('before break');
break myLabel;
console.log('after break');
}
运行这个示例,您可以看到“在中断之前”日志,但是“之后中断”没有。
请注意,我不容忍这种模式,并且中断不会影响标记块之外的任何代码。
发布于 2021-02-23 23:10:31
没有JavaScript,因此也没有等同于PHP的出口()或别名模()的EJS。来自PHP文档的这两个PHP函数的用途:
输出消息并终止当前脚本
在JavaScript中没有“终止当前脚本”的方法。JavaScript总是运行到完成,没有办法阻止它。
实现目标的另一种方法是使用include和filename选项,或者使用renderFile()呈现此模板。
<% if (!something) { %>
<%- include('/notSomethingContent'); %>
<% } else { %>
<%- include('/somethingContent', {something: something}); %>
<% } %>这将使您能够避免您“只是不喜欢”的else中的长缩进模板内容。:-)
发布于 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();。
这是:
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);
});https://stackoverflow.com/questions/66342008
复制相似问题