【发布时间】:2022-02-09 01:08:47
【问题描述】:
我正在尝试获取一个网页来显示我的数据库中的数据并将其显示在表格中的 html 页面上,并能够通过在 ejs 中呈现它来在表格上向下滚动。我基于此站点的代码https://www.tutsmake.com/node-js-fetch-and-display-data-from-mysql-database-in-html-list/
我不太确定我做错了什么,数据库连接得很好,我的视图文件夹中有 ejs 文件。我猜这个问题来自 ejs 文件,但我不确定。我刚刚开始重新编码,所以这对我来说基本上是全新的。
当我转到 localhost:3000/test 时出现 404 错误,当我查看终端时显示 GET/TEST 404 20.377ms -1153,我想我可能会从有 75 行,我试图限制行数,但它仍然无法加载页面,并且由于某种原因,这段代码甚至找不到我的 ejs 文件。
根据我在网上阅读的内容,有上百万种不同的方法可以做到这一点,但我不知道从哪里开始让它发挥作用。我使用 mssql 作为我的数据库并使用 Visual Studio 构建所有内容。
这是我的 server.js
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var expressValidator = require('express-validator');
var flash = require('express-flash');
var session = require('express-session');
var bodyParser = require('body-parser');
var sql = require("mssql/msnodesqlv8");
var connection = require('./lib/db');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(session({
secret: '123456cat',
resave: false,
saveUninitialized: true,
cookie: { maxAge: 60000 }
}))
app.use(flash());
app.use(expressValidator());
app.use('/', indexRouter);
app.use('/index', usersRouter);
// catch 404 and forward to error handler
app.use(function (req, res, next) {
next(createError(404));
});
// error handler
app.use(function (err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
这是我的 dbaCon.js
const sql = require("mssql/msnodesqlv8");
var conn = new sql.ConnectionPool({
server: 'DESKTOP-BA7Q2HM',
port: 1433,
driver: 'msnodesqlv8',
database: "tempdb",
domain: 'DNAME',
requestTimeout: 3600000,
options: {
trustedConnection: true,
enableArtithAbort: true
},
debug: true,
parseJSON: true
});
conn.connect(function (err) {
if (err) throw err;
console.log('Database is connected successfully!');
});
module.exports = conn;
这是我的 users.js
var express = require('express');
var router = express.Router();
var connection = require('../dbaCon.js');
/* GET home page. */
router.get('/', function (req, res, next) {
connection.query('SELECT id, status, type, Date, Review * FROM [dba].[table] ', function (err, rows) {
if (err) {
req.flash('error', err);
res.render('index', { page_title: "test - Node.js", data: '' });
} else {
res.render('index', { page_title: "test - Node.js", data: rows });
}
});
});
module.exports = router;
这是我的 index.ejs 文件
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Display Active Loan info to Client</title>
</head>
<body>
<% if (messages.error) { %>
<p style="color:red"><%- messages.error %></p>
<% } %>
<% if (messages.success) { %>
<p class="alert alert-success mt-4"><%- messages.success %></p>
<% } %>
<br>
<table class="table">
<thead>
<tr>
<th scope="col">id</th>
<th scope="col">status</th>
<th scope="col">type</th>
<th scope="col">date</th>
<th scope="col">review</th>
</tr>
</thead>
<tbody>
<% if(data.length){
for(var i = 0; i< data.length; i++) {%>
<tr>
<th scope="row"><%= (i+1) %></th>
<td><%= data[i].id%></td>
<td><%= data[i].status%></td>
<td><%= data[i].type%></td>
<td><%= data[i].date%></td>
<td><%= data[i].review%></td>
</tr>
<% }
}else{ %>
<tr>
<td colspan="3">No Data Availed</td>
</tr>
<% } %>
</tbody>
</table>
</body>
</html>
【问题讨论】:
-
"我想我可能会一次提取大量数据,因为有 75 行用于此"您能否详细说明您是如何得出 75 行是“ 很多”在任何现代计算环境中,或者
404 Not FoundHTTP 响应代码如何等同于尝试向客户端推送太多数据......?您能否明确指出您提供的定义您尝试请求的/test路由的任何代码的一部分?在请求不存在/未定义的路由时,您根本没有立即定义它,并且不清楚如何不会得到 404。 -
您的 SQL 查询不正确。我会解决的。
标签: javascript html node.js express ejs