如何使用Nuxt ServerMiddleware和Apollo GraphQL处理301重定向

如何使用Nuxt ServerMiddleware和Apollo GraphQL处理301重定向,graphql,apollo,http-status-code-301,nuxt.js,vue-apollo,Graphql,Apollo,Http Status Code 301,Nuxt.js,Vue Apollo,我目前正在构建一个Vue/Nuxt应用程序,再加上一个经过修改的Saleor安装程序,以便在线销售产品 当我们从现有系统迁移时,我们需要能够处理从旧网站URL到新网站URL的301重定向 我修改了API以响应以下GraphQL查询 export const CHECK_REDIRECTS_QUERY = gql` query Redirect($oldPath: String) { redirect(oldPath: $oldPath) { oldPath n

我目前正在构建一个Vue/Nuxt应用程序,再加上一个经过修改的Saleor安装程序,以便在线销售产品

当我们从现有系统迁移时,我们需要能够处理从旧网站URL到新网站URL的301重定向

我修改了API以响应以下GraphQL查询

export const CHECK_REDIRECTS_QUERY = gql`
  query Redirect($oldPath: String) {
    redirect(oldPath: $oldPath) {
      oldPath
      newPath
    }
  }
`
我在~/serverMiddleware/redirect.js文件中创建了以下代码

import { CHECK_REDIRECTS_QUERY } from '~/graphql/navigation/queries'

export default function(req, res, next) {
  console.log('redirects middleware')
  // context.userAgent = process.server ? context.req.headers['user-agent'] : navigator.userAgent
  this.$apollo
    .query({
      query: CHECK_REDIRECTS_QUERY,
      variables: {
        oldPath: '/test/11/old/'
      }
    })
    .then(({ data }) => {
      if (data.redirect.newUrl !== '') {
        res.writeHead(301, { Location: data.redirect.newUrl })
        res.end()
      }
    })
}
我还将其添加到我的nuxt.config.js文件中,如下所示:

 ... 
 serverMiddleware: ['~/serverMiddleware/redirect.js'],
 ...
这不起作用,但我不仅没有得到重定向,我希望函数开头的console.log也不会触发

此外,我还尝试过使用github推荐中编写的代码,这是非常“片状”的,可能在大约50次服务器重启中触发两次

我没有收到任何控制台通知,说明apollo不能在servermiddleware中使用,站点的其余部分似乎运行正常


另外,-为了澄清-我假设中间件应该在每个页面上自动启动,而不需要从组件手动调用?

最后,我在中找到了解决方案


完成了

组织重定向的最简单方法是使用

优秀的查找!来自评论:嗨,虽然链接是分享知识的好方法,但如果将来它们被破坏了,它们不会真正回答这个问题。在回答中添加回答问题的链接的基本内容。如果内容太复杂或太大而不适合此处,请描述建议解决方案的总体思路。请记住始终保留原始解决方案网站的链接引用。见:
res.writeHead(301, { Location: redirect.to })
res.end()