Nodejs中如何将一个路由方法获取的imageUrl传递到另一路由使用
Node.js跨路由传递imageUrl的实现方案
以下是两种适配你现有服务端渲染场景的可行方案:
方案1:使用Session存储(推荐,数据安全度更高)
该方案将值存储在用户专属的会话中,不会出现多用户数据串扰问题。
- 首先确保你已安装并配置
express-session中间件 - 调整路由代码如下:
// 根路径POST路由 router.post('/', async (req, res) => { let imageUrl try { if (req.body.base64URL) imageUrl = await uploader(req.body.base64URL) else if (req.body.url) imageUrl = req.body.url else { res.redirect('/create') return } // 将imageUrl存入当前用户的session req.session.imageUrl = imageUrl res.render('create', { image: imageUrl }) } catch (error) { console.log(error, 'error') } }) // details路由 router.post('/details', async (req, res) => { try { // 从当前用户session取出imageUrl const imageUrl = req.session.imageUrl // 判空处理,避免直接调用出错 if (!imageUrl) return res.redirect('/create') const data = await creator(req.body, imageUrl) // 可选:用完后销毁session中的值,避免后续请求误用 delete req.session.imageUrl } catch (error) { console.log(error, 'error') } })
方案2:使用表单隐藏域传递(无需额外配置,实现更简单)
你在/路由的render方法中已经把imageUrl传递给了create模板,可以直接在模板的提交表单中加隐藏字段传递值:
- 在create页面的表单中添加隐藏域(以EJS模板为例,其他模板语法对应调整即可):
<form action="/details" method="post"> <!-- 原有表单字段 --> <input type="hidden" name="imageUrl" value="<%= image %>"> <button type="submit">提交</button> </form>
- 直接在details路由中取body字段即可:
router.post('/details', async (req, res) => { try { const data = await creator(req.body, req.body.imageUrl) } catch (error) { console.log(error, 'error') } })
注意事项
- 禁止将imageUrl存储在服务端全局变量中,全局变量会被所有用户共享,会出现不同用户的数据串扰问题
- 选择隐藏域方案时,建议对拿到的imageUrl做合法性校验,避免用户手动修改隐藏域值导致异常
内容的提问来源于stack exchange,提问作者user14036065
相关产品推荐
相关产品推荐

