如何在Node.js和Express中使用多个引擎(ejs和hbs)

如何在Node.js和Express中使用多个引擎(ejs和hbs),node.js,express,handlebars.js,ejs,node-modules,Node.js,Express,Handlebars.js,Ejs,Node Modules,我正在尝试将(href)我的hbs页面链接到我的views文件夹中的ejs页面。我已通过进入目录npm install consolid安装了其他教程中所示的consolid,并添加了代码var engines=require('consolid')和应用程序引擎('车把',引擎.车把)添加到我的代码中,但没有任何效果(我也知道如果您使用的是“.ejs”扩展,则无需执行任何操作)。有人可以帮助我,因为我无法查看我的网页,由于这一点。我收到此错误-“未能在视图目录中查找视图employee/add

我正在尝试将(href)我的
hbs
页面链接到我的
views
文件夹中的
ejs
页面。我已通过进入目录
npm install consolid
安装了其他教程中所示的consolid,并添加了代码
var engines=require('consolid')和<代码>应用程序引擎('车把',引擎.车把)添加到我的代码中,但没有任何效果(我也知道如果您使用的是“.ejs”扩展,则无需执行任何操作)。有人可以帮助我,因为我无法查看我的网页,由于这一点。我收到此错误-“未能在
视图
目录中查找视图
employee/addOrEdit
。”。我在下面添加了我的文件夹/文件结构和代码片段。非常感谢。

server.js文件

require('./models/db');

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

var engines = require('consolidate');

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

var app = express();

app.engine('handlebars', engines.handlebars);

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');
//render css files
app.use(express.static("public"));

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

app.use('/employee', employeeController);
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;
employeeController.js文件

require('./models/db');

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

var engines = require('consolidate');

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

var app = express();

app.engine('handlebars', engines.handlebars);

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');
//render css files
app.use(express.static("public"));

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

app.use('/employee', employeeController);
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;
const express=require('express');
var router=express.router();
const mongoose=require('mongoose');
const Employee=mongoose.model('Employee');
//添加任务的占位符
var任务=[“完成演示”,“使用nodejs练习”];
//已删除任务的占位符
var complete=[“finishjquery”];
路由器.get(“/”,(请求,res)=>{
res.render(“雇员/addOrEdit”{
viewTitle:“插入模块”
});
});
路由器.get('/test',(req,res)=>{
res.render(“员工/测试”);
});
//呈现EJ并显示添加的任务、已完成的任务
路由器.get(“/index”,函数(req,res){
res.render(“索引”{task:task,complete:complete});
});
路由器.post(“/”,(请求,res)=>{
如果(请求正文_id='')
插入记录(req,res);
其他的
更新记录(请求、回复);
});
函数插入记录(req,res){
var employee=新员工();
employee.fullName=req.body.fullName;
employee.module=req.body.module;
employee.mobile=req.body.mobile;
employee.city=req.body.city;
employee.save((错误,单据)=>{
如果(!err)
res.redirect(“员工/名单”);
否则{
如果(err.name=='ValidationError'){
handleValidationError(错误,请求正文);
res.render(“雇员/addOrEdit”{
viewTitle:“插入模块”,
雇员:请求机构
});
}
其他的
console.log('插入记录时出错:'+err);
}
});
}
函数更新记录(req、res){
Employee.findOneAndUpdate({u id:req.body.\u id},req.body,{new:true},(err,doc)=>{
如果(!err){res.redirect('employee/list');}
否则{
如果(err.name=='ValidationError'){
handleValidationError(错误,请求正文);
res.render(“雇员/addOrEdit”{
viewTitle:“更新模块”,
雇员:请求机构
});
}
其他的
console.log('记录更新期间出错:'+err);
}
});
}
路由器.get('/list',(req,res)=>{
Employee.find((错误,文档)=>{
如果(!err){
res.render(“员工/名单”{
列表:文档
});
}
否则{
log('检索模块列表时出错:'+err);
}
});
});
函数handleValidationError(错误,正文){
for(错误中的字段){
开关(错误[field].path){
案例“全名”:
正文['fullNameError']=err.errors[field]。消息;
打破
案例“模块”:
正文['moduleError']=err.errors[field]。消息;
打破
违约:
打破
}
}
}
路由器.get('/:id',(req,res)=>{
Employee.findById(req.params.id,(err,doc)=>{
如果(!err){
res.render(“雇员/addOrEdit”{
viewTitle:“更新模块”,
雇员:doc
});
}
});
});
路由器.get('/delete/:id',(req,res)=>{
Employee.findbyiandremove(req.params.id,(err,doc)=>{
如果(!err){
res.redirect(“/employee/list”);
}
else{console.log('Error in module delete:'+err);}
});
});
//用于添加新任务的post路由
路由器.post(“/addtask”),函数(请求,res){
var newTask=req.body.newTask;
//从发布路线添加新任务
任务推送(newTask);
res.redirect(“/”);
});
路由器。post(“/removetask”),功能(请求、回复){
var completeTask=req.body.check;
//检查不同已完成任务的“类型”,然后添加到已完成任务中
如果(完成任务的类型==“字符串”){
完成。推送(完成任务);
//选中时,检查已完成的任务是否已存在于任务中,然后将其删除
task.splice(task.indexOf(completeTask),1);
}else if(完成任务的类型==“对象”){
对于(变量i=0;i
  • 您需要在
    package.json
    文件中添加
    engines
    ejs
    express handlebar

     npm i ejs
     npm i express-handlebars 
    
    const ejs = require('ejs');
    const exhbs = require('express-handlebars');
    
  • Server.js
    文件中导入依赖项

     npm i ejs
     npm i express-handlebars 
    
    const ejs = require('ejs');
    const exhbs = require('express-handlebars');
    
  • 将引擎设置为您的
    server.js文件

     app.set('view engine', 'ejs');
     app.engine('handlebars', exhbs());
     app.set('view engine', 'handlebars');
    
  • 对于渲染模板,需要设置文件扩展名

    res.render('heyy.handlebars');
    res.render('index.ejs');
    

  • 这是您的文件夹结构 内
    main.handlebar
    和内
    body
    添加
    {{{{body}}}
    以标记布局应插入页面的位置

  • 您需要在
    package.json
    文件中添加
    engines
    ejs
    express handlebar

     npm i ejs
     npm i express-handlebars 
    
    const ejs = require('ejs');
    const exhbs = require('express-handlebars');
    
  • Server.js
    文件中导入依赖项

     npm i ejs
     npm i express-handlebars 
    
    const ejs = require('ejs');
    const exhbs = require('express-handlebars');
    
  • 将引擎设置为您的
    server.js文件

     app.set('view engine', 'ejs');
     app.engine('handlebars', exhbs());
     app.set('view engine', 'handlebars');
    
  • 对于渲染模板,需要设置文件扩展名