【发布时间】:2020-11-06 21:21:33
【问题描述】:
我已将路由链接到 html,但 html 一直显示 agentData 未定义。为什么它给我这个错误 尽管正确链接它。 app.js 代码是我链接登录和管理路由的地方。 Routes是登录的地方 根据用户名和密码控制用户的去向。一旦他们登录到 routes.js 然后我会呈现 html 页面 admin.js,是它从 mysql 数据库中获取所有数据并输出为表的地方。如您所见,我确实声明了 agentData 在 admin.js 中。但是,如果我在 routes.js 中删除 app.get/admin,他们会给我另一个错误,不能 /Get admin 错误。什么 我应该怎么做?
routes.js
const express = require('express');
const router = express.Router();
const db = require('../server');
router.get("/", async function (request, response) {
response.render("login.ejs");
});
router.get("/register", async function (req, res) {
res.render("register.ejs");
});
router.post("/login", async function (request, response) {
const { username, password } = request.body;
if (username == 2 && password == 2) {
response.redirect("/admin");
}
else {
return response.status(401).json({
message: "Auth fail",
});
}
});
router.get('/admin', function(req, res, next) {
console.log('reach page');
const sql='SELECT * FROM agentavia';
db.query(sql, function (err, data, fields) {
console.log(data);
if (err) throw err;
res.render('adminhome', { title: 'Agent List', agentData: data});
});
});
router.get('/edit/:id', function(req, res, next) {
const AgentId= req.params.id;
const sql=`SELECT * FROM agentavia WHERE id=${AgentId}`;
db.query(sql, function (err, data) {
if (err) throw err;
res.render('modifyAgent', { title: 'Agent List', editData: data[0]});
});
});
router.post('/edit/:id', function(req, res, next) {
const id= req.params.id;
const updateData=req.body;
const sql = `UPDATE agentavia SET ? WHERE id= ?`;
db.query(sql, [updateData, id], function (err, data) {
if (err) throw err;
console.log(data.affectedRows + " record(s) updated");
});
res.redirect('/admin');
});
module.exports = router;
adminhome.ejs
<table border="1">
<tr>
<th>S.N</th>
<th>Agent Name</th>
<th>Agent ID</th>
<th>AgentStatus</th>
<th>Edit</th>
</tr>
<% if(agentData.length!=0){ var i=1; agentData.forEach(function(data){ %>
<tr>
<td><%=i; %></td>
<td><%=data.agentName %></td>
<td><%=data.agentID %></td>
<td><%=data.agentStatus %></td>
<td><a href="/admin/edit/<%=data.id%>">Edit</a></td>
</tr>
<% i++; }) %> <% } else{ %>
<tr>
<td colspan="7">No Data Found</td>
</tr>
<% } %>
</table>
修改agent.ejs
<div class="agent-detail">
<form action="<%=(typeof editData!='undefined')?'/admin/edit/'+editData.id:'/admin/create'%>" method="POST">
<label>Agent Name</label>
<input type="agentname" placeholder="Enter Agent Name" name="agentName" required value="<%=(typeof editData!='undefined')? editData.agentName:''%>">
<label>Agent ID</label>
<input type="agentID" placeholder="Enter Agent ID" name="agentID" required value="<%=(typeof editData!='undefined')? editData.agentID:''%>">
<label>Agent Status</label>
<input type="Agent Status" placeholder="Enter Agent Status" name="agentStatus" required value="<%=(typeof editData!='undefined')? editData.agentStatus:''%>">
<button type="submit">Submit</button>
</div>
</div>
【问题讨论】:
-
你能检查一下这条记录是否在表 SELECT * FROM agentavia 中?
-
您的
routes.js文件中不应有另一个app.get(...中的app.get(...。这不是它的工作方式,这意味着如果您重新启动服务器,已经登录的人将无法访问/admin。另外,既然你在admin.js中正确定义了它,为什么还要在那里?您不能在多个地方定义它。正如@VijayPalaskar 所建议的那样,尝试console.log(data)正上方res.render('adminhome', { title...以查看该数据是否存在 -
是的,我确实有里面的记录。我什至设法让它在另一个文件夹中工作,所以我将它一点一点地转移到我在这里展示的原始项目文件夹中。至于 app.get 部分,当我从其他示例中看到时,实际上有一个现有示例,它工作得很好。那么使用 router 而不是 app.get 会更好吗?
-
是路由器而不是 app.get。我认为你的文件扩展名有问题。你能检查一下它是否适用于 ..ejs 扩展名?
-
我已经尝试在渲染页面之前放置console.log。它没有提供任何数据...
标签: javascript html node.js ejs