Error en handlebars, nodejs, express, y los niveles de directorios

Iniciado por Diesan Romero, 27 Enero 2019, 16:40 PM

0 Miembros y 1 Visitante están viendo este tema.

Diesan Romero

Bien, llevo días pasándola muy mal. Estoy creando una web con ExpressJS para NodeJS y pues me presento el siguiente problema:

Código (javascript) [Seleccionar]
const path = require('path')
const exphbs = require('express-handlebars')

const morgan = require('morgan');
const multer = require('multer');
const express = require('express');
const erroHandler = require('errorhandler')
const routes = require('../routes/index');

module.exports = app => {

    app.set('port', process.env.PORT || 80)
    console.log(__dirname)
    app.set('views', path.join(__dirname, '../views'));
    app.engine('.hbs', exphbs({
    extName: '.hbs',
    defaultLayout: 'main',
    partialsDir: path.join(app.get('views'), 'partials' ),
    layoutDir: path.join(app.get('views'), 'layouts'),
    helpers: require('../helpers')
}))
    app.set('view engine', '.hbs');


    // middlewares
    app.use(morgan('dev'));
    app.use(multer({dest: path.join(__dirname, '../public/upload/temp')}).single('image'))
    app.use(express.urlencoded({extended: false}));
    app.use(express.json());

    //routes
    routes(app)

    // static files
    app.use('/public', express.static(path.join(__dirname, '../public')));


    // errorhandlers
    if ('development' === app.get('env')) {
        app.use(erroHandler)
    }

    return app;
}


y me da este error:

Error: ENOENT: no such file or directory, open 'C:\Users\Diesan Romero\Desktop\redsocial\views\layouts\main.handlebars'

yo pensé que si subía un nivel, podría entonces encontrar la carpeta pero resulta que no:

Error: Failed to lookup view "index" in views directory "C:\Users\Diesan Romero\Desktop\redsocial\src\server\views"

Aquí les dejo una imagen para que se guíen bien, por el directorio y ojalá me puedan ayudar


EdePC

Si:

app.set('views', path.join(__dirname, '../views'));

devuelve:

C:\Users\Diesan Romero\Desktop\redsocial\src\server\views

Entonces:

app.set('views', path.join(__dirname, '../../views'));

debería devolver:

C:\Users\Diesan Romero\Desktop\redsocial\src\views

- Pero depende de lo que devuelva __dirname, por cierto que devuelve?

Diesan Romero

#2
Cita de: EdePC en 27 Enero 2019, 17:33 PM
Si:

app.set('views', path.join(__dirname, '../views'));

devuelve:

C:\Users\Diesan Romero\Desktop\redsocial\src\server\views

Entonces:

app.set('views', path.join(__dirname, '../../views'));

debería devolver:

C:\Users\Diesan Romero\Desktop\redsocial\src\views

- Pero depende de lo que devuelva __dirname, por cierto que devuelve?

devuelve C:\Users\Diesan Romero\Desktop\redsocial\src\server

cuando subo un nivel de directorio me da este error
Error: ENOENT: no such file or directory, open 'C:\Users\Diesan Romero\Desktop\redsocial\views\layouts\main.handlebars'

lógicamente hay algo que no está bien

EFEX

Yo no veo un archivo llamado main.handlebars dentro de la carpeta layouts. El error es de que no se encontro el archivo.
GITHUB 

Diesan Romero

Cita de: EFEX en 29 Enero 2019, 01:37 AM
Yo no veo un archivo llamado main.handlebars dentro de la carpeta layouts. El error es de que no se encontro el archivo.

no, fíjate bien en la ruta completa