首页 > 解决方案 > 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 被渲染

标签: javascriptnode.jsexpressejs

解决方案


有效的是例如:

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

...

推荐阅读