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