Как связать файлы руля hbs с файлами e js? ошибка - "Не удалось найти представление" employee / addOrEdit "в каталоге представлений ..." - PullRequest
0 голосов
/ 25 марта 2020

Я реализовал приложение CRUD, аналогичное приведенному в этой ссылке, - https://www.youtube.com/watch?v=voDummz1gO0&t=1445s и приложение TODO, аналогичное приведенному в этой ссылке, - https://medium.com/@atingenkay / creation-a-todo -app-с- node-js - express -8fa51f39b16f . Я добавил ссылку href на странице addOrEdit.hbs в index.e js, как в папке views, так и добавил код из TODO в CRUD. Затем я запускаю сервер, используя файл bat, сообщество компаса mongodb и сервер узлов. js, все подключается нормально, но я получаю эту ошибку - "Не удалось найти представление" employee / addOrEdit "в каталоге представлений ..." Это потому, что Я неправильно добавил код на мой сервер. js файл или файл контроллера. Я думал, что это может быть связано с файлом server. js, имеющим следующее - "app.set ('view engine', 'hbs'); app.set ('view engine', 'e js');" поскольку я не знаю, возможно ли установить двигатели вида как hbs и e js. Ниже мой код и структура папок / файлов, надеюсь, это поможет! Структура папок / файлов

сервер. js файл

require('./models/db');

const express = require('express');
const path = require('path');
const exphbs = require('express-handlebars');
const bodyparser = require('body-parser');

const employeeController = require('./controllers/employeeController');

var app = express();

app.use(bodyparser.urlencoded({
    extended: true
}));
app.use(bodyparser.json());
app.set('views', path.join(__dirname, '/views/'));
app.engine('hbs', exphbs({ extname: 'hbs', defaultLayout: 'mainLayout', layoutsDir: __dirname + '/views/layouts/' }));
app.set('view engine', 'hbs');
app.set('view engine', 'ejs');
//render css files
app.use(express.static("public"));

app.listen(3000, () => {
    console.log('Express server started at port : 3000');
});

app.use('/employee', employeeController);

employeeController. js файл в файле контроллера

const express = require('express');
var router = express.Router();
const mongoose = require('mongoose');
const Employee = mongoose.model('Employee');
//placeholders for added task
var task = ["complete presentation", "practise with nodejs"];
//placeholders for removed task
var complete = ["finish jquery"];

router.get('/', (req, res) => {
    res.render("employee/addOrEdit", {
        viewTitle: "Insert Module"
    });
});

router.get('/test', (req, res) => {
    res.render("employee/test");
});

//render the ejs and display added task, completed task
router.get("/index", function(req, res) {
    res.render("index", { task: task, complete: complete });
});

router.post('/', (req, res) => {
    if (req.body._id == '')
        insertRecord(req, res);
        else
        updateRecord(req, res);
});


function insertRecord(req, res) {
    var employee = new Employee();
    employee.fullName = req.body.fullName;
    employee.module = req.body.module;
    employee.mobile = req.body.mobile;
    employee.city = req.body.city;
    employee.save((err, doc) => {
        if (!err)
            res.redirect('employee/list');
        else {
            if (err.name == 'ValidationError') {
                handleValidationError(err, req.body);
                res.render("employee/addOrEdit", {
                    viewTitle: "Insert Module",
                    employee: req.body
                });
            }
            else
                console.log('Error during record insertion : ' + err);
        }
    });
}

function updateRecord(req, res) {
    Employee.findOneAndUpdate({ _id: req.body._id }, req.body, { new: true }, (err, doc) => {
        if (!err) { res.redirect('employee/list'); }
        else {
            if (err.name == 'ValidationError') {
                handleValidationError(err, req.body);
                res.render("employee/addOrEdit", {
                    viewTitle: 'Update Module',
                    employee: req.body
                });
            }
            else
                console.log('Error during record update : ' + err);
        }
    });
}


router.get('/list', (req, res) => {
    Employee.find((err, docs) => {
        if (!err) {
            res.render("employee/list", {
                list: docs
            });
        }
        else {
            console.log('Error in retrieving module list :' + err);
        }
    });
});


function handleValidationError(err, body) {
    for (field in err.errors) {
        switch (err.errors[field].path) {
            case 'fullName':
                body['fullNameError'] = err.errors[field].message;
                break;
            case 'module':
                body['moduleError'] = err.errors[field].message;
                break;
            default:
                break;
        }
    }
}

router.get('/:id', (req, res) => {
    Employee.findById(req.params.id, (err, doc) => {
        if (!err) {
            res.render("employee/addOrEdit", {
                viewTitle: "Update Module",
                employee: doc
            });
        }
    });
});

router.get('/delete/:id', (req, res) => {
    Employee.findByIdAndRemove(req.params.id, (err, doc) => {
        if (!err) {
            res.redirect('/employee/list');
        }
        else { console.log('Error in module delete :' + err); }
    });
});

//post route for adding new task 
router.post("/addtask", function(req, res) {
    var newTask = req.body.newtask;
    //add the new task from the post route
    task.push(newTask);
    res.redirect("/");
});

router.post("/removetask", function(req, res) {
    var completeTask = req.body.check;
    //check for the "typeof" the different completed task, then add into the complete task
    if (typeof completeTask === "string") {
        complete.push(completeTask);
        //check if the completed task already exits in the task when checked, then remove it
        task.splice(task.indexOf(completeTask), 1);
    } else if (typeof completeTask === "object") {
        for (var i = 0; i < completeTask.length; i++) {
            complete.push(completeTask[i]);
            task.splice(task.indexOf(completeTask[i]), 1);
        }
    }
    res.redirect("/");
});

module.exports = router;
...