我无法在index.js中的路由之间共享var。我需要在第二条路线的第一条路线中使用var页面。是否需要为此关闭?我有两条路线:
第一条路线:
router.get('/:page', async (req, res, next) =>{
var perPage = 5;
var page = req.params.page || 1;
console.log(page);
const expedientes = await Expediente
.find()
.skip((perPage*page)-perPage)
.limit(perPage)
.exec((err, expedientes)=> {
Expediente.count().exec((err, count)=> {
if (err) return next(err)
res.render('index', {
expedientes,
current: page,
pages: Math.ceil(count / perPage)
})
})
})
});
第二条路线:
router.get('/select/:id', async (req,res) => {
const { id } = req.params;
const {path} = req.path;
const expediente = await Expediente.findOne({selected:true});
const expediente2 = await Expediente.findById(id);
if (expediente){
expediente.selected=!expediente.selected;
await expediente.save();
}
expediente2.selected=!expediente2.selected;
await expediente2.save();
res.redirect('/1');
});
我需要使用var page作为第二条路线的最后一行。我如何获得该价值来使用它?我尝试过:
res.redirect('/'+ page);
但是它不起作用。 有关此问题的一些信息?
答案 0 :(得分:0)
您可能应该避免将前端状态保留在后端中。为了避免这种情况,您可以在重定向中引入查询参数
router.get('/select/:id', async ( req, res ) => {
const { id } = req.params;
const {path} = req.path;
const expediente = await Expediente.findOne({selected:true});
const expediente2 = await Expediente.findById(id);
const page = req.query.page;
if (expediente){
expediente.selected=!expediente.selected;
await expediente.save();
}
expediente2.selected=!expediente2.selected;
await expediente2.save();
res.redirect('/' + page);
});
然后,您应使用/select/2?page=1
调用URL,这会将您重定向到页面。
在您的解决方案中,当有两个由两个不同的客户端调用的路由时,将会定义完全相同的页面,这可能不是您想要的。
答案 1 :(得分:0)
解决方案并不容易。在我的应用程序中,我有两个不同的需求。两者都需要从数据库中获取数据。
第一个是分页,每按一次一个分页按钮,就必须查询数据库以获得该页面分页的记录集。
第二个是记录选择,它也需要数据库,因为当您选择记录时,将存储ID,以便删除和编辑按钮起作用。所有这一切都很完美。
但是问题是当我选择一条记录并且我在分页中前进并再次选择其他记录时。当页面再次加载时,我找不到重定向到它来自的页面的方法。那就是选择第二条记录的页面分页。
因此,我认为将最后一页保存在变量中,可以使用该变量将其重定向到其他路由。
因此,我的问题是:我可以将res.params.page
保存在变量中,然后在其他路径中使用该变量吗?