未在请求 node.js 上呈现页面
Posted
技术标签:
【中文标题】未在请求 node.js 上呈现页面【英文标题】:not rendering page on request node.js 【发布时间】:2021-05-13 13:44:58 【问题描述】:我有这个前端功能:
var finalSelValue = ""
function changeFunc()
var selectBox = document.getElementById("selectBox");
var selectedValue = selectBox.options[selectBox.selectedIndex].value;
finalSelValue = selectedValue
fetch('/adminFilter',
method: 'POST',
headers: 'content-type': 'application/json',
body: JSON.stringify(
finalSelValue
)
)
然后在后端:
router.post('/adminFilter', auth.ensureAuthenticated, auth.roleCheck('ADMIN'), (req, res) =>
console.log("filter " + req.body.finalSelValue)
var query = "select * from tkwdottawa where STATUS = '" + req.body.finalSelValue + "'"
ibmdb.open(DBCredentials.getDBCredentials(), function(err, conn)
if (err) return console.log(err);
conn.query(query, function(err, rows)
if (err)
res.writeHead(404);
for (var i = 0; i < rows.length; i++)
console.log(rows[i])
res.render('AdminDash',
page_title: "AdminDash",
data: rows
);
conn.close(function()
console.log('done adminFilter');
);
);
);
)
它正确记录了循环所在的新值,但它没有使用新数据重新渲染页面!我该如何解决这个问题!
【问题讨论】:
fetch
的有用之处在于它不会重新加载页面。如果您希望 POST 数据到服务器并使用响应重新加载整个页面,请使用 javascript 加载 FormData
对象并提交它。或者您必须获取fetch
返回的数据并以编程方式更新页面的相应部分。
【参考方案1】:
问题可能是因为您尚未完全配置您的 nodejs 应用程序。您应该知道 render() 方法必须有一个模板引擎来处理可用的视图。您可以只安装以下模板引擎之一,即
-
帕格
EJS
车把
来自 Npm 存储库。
只需使用 npm install [pug 或 ejs] 我建议这两个,因为它们的学习曲线非常简单
另一种解决方案是只使用 send() 或 sendFile() 方法。在这种情况下,这会将数据发送回客户端,即获取请求,然后您可以从 .then 回调中获取响应。 并从前端脚本更新视图。
只是一个注释
渲染方法与模板引擎一起使用,主要是面向服务器端渲染的方法
【讨论】:
以上是关于未在请求 node.js 上呈现页面的主要内容,如果未能解决你的问题,请参考以下文章
Node.js 借助art-template进行后端渲染并呈现页面到前端
Node.js/ Ionic 应用程序未在 Heroku 上正确部署