【问题标题】:How to add header or request param to getServerSideProps in Nextjs如何在 Nextjs 中向 getServerSideProps 添加标头或请求参数
【发布时间】:2021-08-20 05:22:04
【问题描述】:

我想将一个简单的字符串值或 JWT 访问令牌传递给 NextJS 中的getServerSideProps 函数,然后我想从服务器端为用户做一些请求。 我的 JWT 访问令牌当前存储在内存中(处于某种状态)。

如何将我的 JWT 访问令牌或任何其他字符串值传递给 getServerSideProps

我读过很多次,您可以将 cookie 传递给 getServerSideProps,但我想将此访问令牌值添加到请求标头或请求参数中。

除了cookies或querystring参数之外,还有没有其他方法可以将自定义值添加到在服务器上执行的nextjs中的getServerSideProps函数?

【问题讨论】:

    标签: next.js


    【解决方案1】:

    如果您设置了custom server,则可以将值传递给getServerSideProps。您可以使用他们的示例来解析 url,然后将值添加到查询中,但请注意,他们的示例使用来自 node 的 URL.parse 并且已被弃用,因此您需要为更新的 node 版本修改它。

    处理这个问题的第二种方法(仍然使用自定义服务器)是利用Express-style response locals。在上面链接的下一页上使用他们的第一个示例,它可能如下所示:

    // Custom Server
    ...
    app.prepare().then(() => {
      createServer((req, res) => {
        res.locals.myServerValue = "someValue"
        handle(req, res)
      }).listen(3000, (err) => {
        if (err) throw err
        console.log('> Ready on http://localhost:3000')
      })
    })
    ...
    

    现在在getServerSideProps,您可以从响应对象中访问该值:

    export const getServerSideProps = async ({ res }) => {
      // Get the value from res.locals
      const myServerValue = res.locals.myServerValue
    
      // Do something with myServerValue
      console.log(myServerValue) // prints "someValue"
    
      // If desired, pass the value to the page if that's how you're using it
      return {
        props: {
          myServerValue
        }
      }
    }
    

    【讨论】:

    • 在这种情况下,创建自定义服务器会带来什么价值?单独使用getServerSideProps 也可以达到同样的效果。通过阅读 OP 的问题,我假设每个请求传递的值会有所不同。
    • 自定义服务器的价值是可以传值给getServerSideProps。用户询问如何在不使用 cookie 的情况下将值传递给getServerSideProps(例如请求标头或附加值)。在这种情况下,一些处理或设置必须在 getServerSideProps 之前运行,这意味着它需要在处理 Next 之前在自定义服务器上发生,然后传递到 Next 中,然后可以在 getServerSideProps 中处理。
    • 是的,但是您可以直接在getServerSideProps 中运行该处理/设置,而无需使用自定义服务器。
    • 是的 - 我认为我们对 OP 问题的解释不同。 OP 正在特别询问如何将内容传递给getServerSideProps,我正在阅读,“我正在做一些事情,比如在 Next 加载之前进行 JWT 验证,我想将一些结果传递给getServerSideProps,这样我就可以在我的页面呈现之前,在 Next 中做更多的事情。”虽然您可以在 getServerSideProps 中进行 JWT 验证,但 OP 正在询问如何在 getServerSideProps 之外进行验证,然后将一些数据输入到 getServerSideProps。为此,您需要一个自定义服务器。
    • 明白了,很公平
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 2012-05-12
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    相关资源
    最近更新 更多