Express 使用graphql使用Next.js清理URL

Express 使用graphql使用Next.js清理URL,express,graphql,next.js,clean-urls,Express,Graphql,Next.js,Clean Urls,我非常感谢能为next.js实现服务器端对干净URL的支持 我在后端使用graphql瑜伽(和prisma),在前端使用apollo客户端的next.js 我的graphql瑜伽服务器正在端口4444上运行 不知道如何让它工作,最好的方法是什么 我试着用它 它使用server.get,这似乎不适用于yoga graphql 我还尝试将其实现为一个中间件,但也未能使其正常工作(似乎从未触发server.get) 我发现的一些答案建议使用自定义express服务器为next.js路由创建一个单独的文

我非常感谢能为next.js实现服务器端对干净URL的支持

我在后端使用graphql瑜伽(和prisma),在前端使用apollo客户端的next.js

我的graphql瑜伽服务器正在端口4444上运行

不知道如何让它工作,最好的方法是什么

我试着用它

它使用server.get,这似乎不适用于yoga graphql

我还尝试将其实现为一个中间件,但也未能使其正常工作(似乎从未触发server.get)

我发现的一些答案建议使用自定义express服务器为next.js路由创建一个单独的文件,并为graphql路由创建一个单独的文件

我不知道如何同时运行server.js和index.js,也不知道是否建议这样做

在我的后端/src/index.js中:


require("dotenv").config({ path: ".env" });

const next = require('next');
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();

const createServer = require("./createServer");

const server = createServer();

app
  .prepare()
  .then(() => {

   server.express.get('/item/:id', (req, res) => {
      const actualPage = '/item'
      const queryParams = { id: req.params.id }
      app.render(req, res, actualPage, queryParams)
    })

    server.express.get('*', (req, res) => {
      return handle(req, res)
    })

server.start(
  {
    cors: {
      credentials: true,
      origin: [process.env.FRONTEND_URL, process.env.BACKEND_URL, process.env.PLAYGROUND_URL]
    }
  },
  deets => {
    console.log(`Server is now running on port http://localhost:${deets.port}`);
  }
);

})
  .catch(ex => {
    console.error(ex.stack)
    process.exit(1)
  })

我希望这段代码为以下路径提供干净的URL:

localhost/item?id=1(初始路径)

localhost/item/1(干净的url)

然而,当我从前端导航到localhost/item/1时,我得到一个404错误(应用程序的其余部分按预期工作),当我启动graphql服务器时,它会继续登录控制台:“客户端pings,但没有页面:/\u error”的条目

localhost/4444也给出了404错误,而不是显示graphql