使用重定向传递对象数组的正确方法是什么?

时间:2017-07-20 21:32:44

标签: javascript node.js

我使用node.js,我需要使用res.redirect()传递一个对象数组, 我尝试使用查询字符串,但这不是一个好主意,因为数组太大而且我可以获得Error 414 Request URI too long。 使用connect-flash也不是一个好方法,它对于传递消息更有用。 而且我不想使用req.app.locals

希望你能帮我解决任何问题。

2 个答案:

答案 0 :(得分:3)

假设这里的客户端是一个浏览器,你只想自动跟随重定向,然后在服务器为新重定向的URL生成页面时继承一些新的状态,那么这里有一些选项:

  1. 如果您已经为用户建立了会话,那么您可以将数据存储在会话中,然后包含一个查询参数,该参数告诉路由处理程序您要重定向到的页面在会话中获取相关数据。

  2. 您还可以创建临时的服务器端数据缓存。生成随机密钥(可能是时间戳加上随机数)。使用该密钥将数据存储在服务器端Map中。然后将密钥放入重定向的查询字符串中。然后,在新的重定向页面的路由处理程序中,它将看到查询字符串参数,它可以从查询字符串中获取该密钥,并从服务器端Map访问数据作为临时缓存(也可能将其从缓存中删除)。该方案适用于无会话环境。

    然后,您需要一些方案来清除缓存中未使用的数据,因此它不会累积。可能有意义的是为数据添加时间戳,然后有一个setInterval()计时器,如果他们的时间戳早于xx分钟,就会从Map中删除。

  3. 如果请求是Ajax调用而不是常规浏览器页面请求,那么您根本不需要使用重定向。您可以返回他们如果按照您的重定向获得的内容。然后,您不必发明临时存储数据的位置。您只需使用数据生成所需的页面并将其返回。

答案 1 :(得分:0)

将数据存储为会话数据,并在登陆页面时将其提供给他们。

另一种方法是让客户端在执行重定向后异步请求数据。