Node.js ejs - no hagan archivo si no existe

votos
2

Tengo unas vistas de carpetas y un archivo de estructura ejs profile_60113.ejs como este

views
    docs
        profile_60113.ejs

Puedo hacer dinámicamente el archivo del modo siguiente (data.groupID == 60113):

<%- include(docs/profile_ + data.groupID); %>

Pero ¿cómo puedo comprobar primero si existe el archivo? He intentado esto:

<% if (fs.existsSync(views/docs/profile_ + data.groupID)) { %>
    <%- include(docs/profile_ + data.groupID); %>
<% } %>

O ...

<% if (fs.existsSync(docs/profile_ + data.groupID)) { %>
    <%- include(docs/profile_ + data.groupID); %>
<% } %>

Pero no funcionó ... fs = const require ( 'fs') está incluido en el controlador y FS: FS se prestan

Publicado el 13/02/2020 a las 23:54
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

Lo que funciona es, por ejemplo:

Opción 1 (síncrono): Plantilla

Lado del servidor:

const fs = require('fs');

var getGroupID = 60113;

res.render('docs', {
   page: setPage,
   data: {groupID: getGroupID},
   fs: fs   
});  

Modelo:

<% if (fs.existsSync("views/docs/profile_" + data.groupID + ".ejs")) { %>
    <%- include("docs/profile_" + data.groupID); %>
<% } %>

Opción 2 (síncrono): Serverside y Plantilla

Lado del servidor:

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

Modelo:

<% if (profile) { %>
    <%- include("docs/profile_" + data.groupID); %>
<% } %> 

Opción 3 (Asynchronous I / O): Serverside y Plantilla

Lado del servidor:

...

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

...
Respondida el 14/02/2020 a las 00:46
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more