如何在Javascript中使用两种不同的视图引擎?



我用node.js和mysql做了一个数据库,我所有的视图都是hbs文件。我希望当用户登录时,他们能够在我的帐户页面上检查他们的分数。我看到了一个关于如何以表格形式显示分数的教程,但它使用ejs视图引擎来显示页面。现在我的默认视图引擎是hbs当我写app.set('view engine',ejs)我的帐户页面工作,但所有其他hbs页面崩溃。我尝试使用consolidate.js和使用app.engine而不是app.set,但仍然是ejs页面崩溃或hbs页面。我需要明天提交这个项目,如果有人能帮助这将意味着很多。我在下面附上了app.jsuserlist.ejs文件。

//app.js

const express = require("express")
const path = require("path");
const app = express();
const cookieParser = require("cookie-parser");
const bodyParser = require("body-parser");
const nodemailer = require("nodemailer");
const { getMaxListeners } = require("process");
const { info } = require("console");
const ejs = require('ejs');
const exhbs = require('express-handlebars');
const mysql = require("mysql");
const dotenv=require('dotenv');
dotenv.config({path: './.env'})

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

const db = mysql.createConnection({
host: process.env.DATABASE_HOST,
user: process.env.DATABASE_USER,
password:process.env.DATABASE_PASSWORD,
database: process.env.DATABASE

});
const publicDirectory = path.join(__dirname, './public');
app.use(express.static(publicDirectory));
app.use(express.urlencoded({ extended: false}));
app.use(express.json());
app.use(cookieParser());
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());

app.set('view engine', 'hbs');
app.set('view engine', 'ejs');

app.get("/instructions", (req, res) => {
res.render("instructions")
});
app.get("/scoreform", (req, res) => {
res.render("scoreform")
});

//Define Routes
app.use('/', require('./routes/pages'));
app.use('/auth',require('./routes/auth'));
app.use('/auth',require('./routes/auth'));
app.use('/auth',require('./routes/auth'))
var usersRouter = require('./routes/users');
app.use('/users',usersRouter);
db.connect((error) => {
if (error) {
console.log(error)
}
else {
console.log("MYSQL Connected...")
}
})

app.listen(5002, () => {
console.log("server started on port 5002")})

//userlist.ejs

<!DOCTYPE html>
<html lang="en">
<head>
<title>Fetch using MySQL and Node.js</title>
</head>
<body>
<div class="table-data">
<h2>Display Data using Node.js & MySQL</h2>
<table border="1">
<tr>
<th>S.N</th>
<th>Name</th>
<th>Email</th>
<th>Score</th>

</tr>

<%
if(userData.length!=0){
var i=1;
userData.forEach(function(data){
%>
<tr>
<td><%=i; %></td>
<td><%=data.name %></td>
<td><%=data.email %></td>
<td><%=data.score %></td>

</tr>
<%  i++; }) %>
<% } else{ %>
<tr>
<td colspan="7">No Data Found</td>
</tr>
<% } %>
</table>
</div>
</body>
<style> 
table, td, th { 
border: 1px solid #ddd; 
text-align: left; 
} 
table { 
border-collapse: collapse; 
width: 50%; 
} 
.table-data{ 
position: relative; 
left:150px; 
top:100px; 
} 
th, td { 
padding: 15px; 
} 
</style>
</html>

您不必通过Express来使用模板系统。因此,一个模板系统可以是您使用res.render()的Express注册的模板系统,另一个可以手动使用。

下面是一个从EJS文档中借来的手工示例,它使用来自字符串的简单模板,但是您也可以将模板从文件加载到字符串中,并以这种方式使用它:

const ejs = require('ejs');
app.get("/somePath", (req, res) => {
let people = ['geddy', 'neil', 'alex'];
let html = ejs.render('<%= people.join(", "); %>', {people: people});
res.send(html);
});

但是,我认为如果您只是将EJS模板示例转换为与项目其余部分使用的模板系统相同的模板系统,则会更干净。

相关内容

  • 没有找到相关文章

最新更新