我设置了此路由器:
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中的数据显示到handlebars页面上。 到目前为止还不错。
我还有另一台路由器可以发布数据:
// 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
}
});
});
问题
在我的第一台路由器中,它将
我重定向到'admin/posts'
,并在手柄中显示results
数据。
但是,我使用post
路由器也是这样做的-它将
我重定向到'admin/posts'
。 但它没有显示任何数据,因为我没有传递results
。
问题
加载数据的唯一选择是
POST
路由器中的else
语句中?
您没有重定向到代码中的任何地方,您所做的只是发送回一些呈现的HTML。
不同之处在于,您实际上可以执行重定向,而不只是在post/create
处理程序中发回html。
当您将重定向响应发送回客户端时(在您的情况下,重定向到/
)。 客户端将生成另一个到该位置的请求,您的数据将正确呈现,而无需将任何代码复制到post/create
处理程序。
在post/create
处理程序中使用res.redirection
,如下所示。
// 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;
}