【发布时间】:2022-01-26 02:31:15
【问题描述】:
试图通过 .render 函数传递一个包含多达 3000 个名称的对象。
检查了所有内容并得出结论,它不是数据库,也不是页面,我认为它是数据“复制”到响应。我看到有人提出了一些关于 AJAX 的建议并更改了响应,一次 10 个名称,但恐怕我不完全确定如何执行它.. 代码不在我的机器上,所以会尽力描述它:
在 route.js 中
import addRequestPageController from "../controllers/addRequestPageController"
app.get('/add_request', ... , addRequestPageController.addRequest)
在 addRequestPageController.js 中
import DBConnection from "../configs/connectDB" // This is where the mysql DB connection is configured
let addRequest = function(req, res) {
var obj = {}
try {
DBConnection.query(..(a query brings 50~ names).., function(err, rows) {
if (err) {
res.render("error.ejs")
} else { // No errors
obj.docNames = rows
// Each doctor has firstName and lastName attributes
res.render("addRequest.ejs", obj)
}
})
DBConnection.query(..(query-3000 rows with drug names, ratings).., function(err, rows) {
if (err) {
res.render("error.ejs")
} else { // No errors
obj.drugNames = rows
// Each drug has it's name(varchar) and rating (float value)
res.render("addRequest.ejs", obj)
}
})
} catch{...}
}
module.exports = {
addRequest: addRequest
}
添加 addRequest.ejs 以供进一步参考-
在 addRequest.ejs 中
...
<select name="docNames" id="docNames">
<option value="">--Please choose an option--</option>
<% docNames.forEach(function(doc) { %>
<!-- Start of forEach -->
<option value="<% doc.firstName + " " + doc.lastName %>">
<!-- that was to put a value of the doctor's name -->
<% doc.firstName + " " + doc.lastName %>
<!-- and that was to put the actual value the user sees -->
</option>
<!-- End of forEach -->
<% }) %>
</select>
<select name="drugNames" id="drugNames">
<option value="">--Please choose an option--</option>
<% drugNames.forEach(function(drug) { %>
<!-- Start of forEach -->
<option value="<% drug.drug_name %>">
<!-- that was to put a value of the drug's name -->
<% drug.drug_name + " and rating of : " + drug.rating %>
<!-- that was to put the actual value the user sees -->
</option>
<!-- End of forEach -->
<% }) %>
</select>
...
所以基本上我将参数传递给页面,但它卡在加载并且没有给我任何错误。 有没有办法只更改 addRequest 以获得所需的结果?
edit:添加了addRequest.ejs,并编辑了addRequestPageController.js。 但是,我确实尝试渲染一个没有任何内容的页面,但它仍然无法加载.. 感觉坏人
【问题讨论】:
-
为什么要传递大量数据来渲染?这不是最佳做法
-
您能说明
addReqest.ejs对所有这些数据做了什么吗? -
3000 个名字与即使是基本图像相比也算不上太多数据。如果名称的平均长度为 30 个字节,那么您的数据仍然少于 90k。发送应该没有问题。你遇到了什么确切的问题?卡在加载可能是由其他原因引起的。作为参考,CNN主页超过1MB。
-
刚刚编辑了@Bergi 帖子,尽管正如我在下面提到的,我尝试在不使用“docNames”或“drugNames”的情况下呈现不同的页面,但无济于事):非常感谢你们..
-
@jfriend00 我真的希望这是我在 ejs 做过的事情,所以你的消息给了我希望
标签: javascript node.js