javascript - node.js ejs - 如果文件不存在,则不渲染文件
问题描述
我有一个像这样的views文件夹结构和一个ejs文件profile_60113.ejs
views
docs
profile_60113.ejs
我可以像这样动态呈现文件(其中 data.groupID == 60113):
<%- include("docs/profile_" + data.groupID); %>
但是如何首先检查文件是否存在?我试过这个:
<% if (fs.existsSync("views/docs/profile_" + data.groupID)) { %>
<%- include("docs/profile_" + data.groupID); %>
<% } %>
或者 ...
<% if (fs.existsSync("docs/profile_" + data.groupID)) { %>
<%- include("docs/profile_" + data.groupID); %>
<% } %>
但是没有用... const fs = require('fs') 包含在控制器中,并且 fs:fs 被渲染
解决方案
有效的是例如:
选项 1(同步):模板
服务器端:
const fs = require('fs');
var getGroupID = 60113;
res.render('docs', {
page: setPage,
data: {groupID: getGroupID},
fs: fs
});
模板:
<% if (fs.existsSync("views/docs/profile_" + data.groupID + ".ejs")) { %>
<%- include("docs/profile_" + data.groupID); %>
<% } %>
选项 2(同步):服务器端和模板
服务器端:
const fs = require('fs');
var getGroupID = 60113;
var getProfile;
if (fs.existsSync("views/docs/profile_" + getGroupID + ".ejs")) {
getProfile = true;
} else {
getProfile = false;
}
res.render('docs', {
page: setPage,
data: {groupID: getGroupID},
profile: getProfile
});
模板:
<% if (profile) { %>
<%- include("docs/profile_" + data.groupID); %>
<% } %>
选项 3(异步 I/O):服务器端和模板
服务器端:
...
var getProfile;
try {
await fs.promises.access("views/docs/profile_" + getGroupID + ".ejs");
getProfile = true;
} catch (error) {
console.log(error);
}
...
推荐阅读
- angular - 更新到 Angular 6 后 Angular 材质库出现问题
- c - 创建一个新的瘦进程、fork 或线程?
- c# - Observable.Retry() 在 Hot Observables 中没有按预期工作
- javascript - 如何将 fetch 的响应解析为 JSON
- excel - 批量导出 PDF 属性
- scala - Spark 在带有 SBT 程序集 JAR 的 spark-submit 中找不到应用程序类本身 (ClassNotFoundException)
- amazon-web-services - 如何在 ECR 中重新标记图像?
- thunderbird - 筛选 addflag "$label1" 在 Thunderbird 中不显示
- c# - 针对 SQL Server 事务数据执行的实时聚合设计
- android - 安卓中的Javax