node.js e js - не отображать файл, если он не существует - PullRequest
2 голосов
/ 13 февраля 2020

У меня есть структура папок views и ae js file profile_60113.e js вот так

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 Ответ

0 голосов
/ 14 февраля 2020

Что работает, например:

Вариант 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 (асинхронный ввод-вывод): серверная часть и шаблон

Серверная часть:

...

var getProfile;
try {
  await fs.promises.access("views/docs/profile_" + getGroupID + ".ejs");
  getProfile = true;
} catch (error) {
  console.log(error);
}   

...
...