node.js - 快速重定向但不显示任何数据?
问题描述
我有这个路由器设置:
router.get('/', (req, res)=>{
// Get posts data
db.query("select * from PostSchema", (err, results)=>{
if(err){
return res.status(500).end(err.message);
}
else{
res.render('admin/posts', {
results: results
});
}
});
});
输出将来自 MySQL 的数据显示到我的车把页面上。到目前为止,一切都很好。
我有另一个发布数据的路由器:
// Post data
router.post('/create', (req, res)=>{
var {title, status, allowComments, body} = req.body;
// Execute query
db.query("INSERT INTO PostSchema (title, status, comments, body) values (?, ?, ?, ?)", [title, status, allowComments, body],(err, results)=>{
if(err){
return err;
}
else{
console.log('Post Created!');
res.render('admin/posts'); // This redirects but does not show any data
}
});
});
问题
在我的第一个路由器中 -redirects
我要'admin/posts'
使用results
车把中显示的数据。
但是,我对post
路由器做同样的事情 -redirects
我要'admin/posts'
. 但它没有显示任何数据,因为我没有通过results
。
问题
我加载数据的唯一选择是
- 我是否需要从第一个路由器复制所有代码并将其粘贴到路由器
else
中的语句中post
?
解决方案
您没有重定向到代码中的任何地方,您所做的只是发回一些呈现的 html。
不同之处在于您实际上可以执行重定向,而不仅仅是在POST /create
处理程序中发回 html。
当您将重定向响应发送回客户端时(/
在您的情况下重定向到)。客户端将向该位置生成另一个请求,并且您的数据将正确呈现,而无需将任何代码复制到POST /create
处理程序。
像这样res.redirect
在你的处理程序中使用。POST /create
// Post data
router.post('/create', (req, res)=>{
var {title, status, allowComments, body} = req.body;
// Execute query
db.query("INSERT INTO PostSchema (title, status, comments, body) values (?, ?, ?, ?)", [title, status, allowComments, body],(err, results)=>{
if(err){
return err;
}
else{
console.log('Post Created!');
res.redirect(303, '/');
}
});
});
另请注意,如果您的处理程序中有错误POST /create
,请求将挂起,因为您没有将任何内容发送回客户端(您只是从函数返回)
if(err){
return err;
}
推荐阅读
- .htaccess - 如何阻止插件域目录访问
- javascript - MS Dynamics CRM - 如何测试帐户中是否存在 Notes 记录
- python - 存储过程多表 - PYODBC - Python
- amazon-web-services - 从 aws-cli 向 AWS EMR 集群提交 Spark 作业
- c++11 - 如何使用 std::result_of 返回函数类型而不是 void
- pyside - PySide gui、Maya hypershade 更新
- gradle - gradle 从 init 脚本覆盖插件存储库
- google-chrome - 重置 chrome 媒体参与度分数
- c# - 使用 LinkText 一次搜索 2 件事
- c# - C# Regex "Verbose" 就像在 Python 中一样