Я был бы очень признателен за помощь в реализации поддержки чистых URL на стороне сервера для next.js.
Я использую graphql-yoga (и prisma) на backend и next.js с клиентом apollo на внешнем интерфейсе.
Мой сервер graphql-yoga работает на порту 4444.
Не уверен, как заставить это работать и каков будет лучший подход.
Я пытался использовать документацию next.js для поддержки на стороне сервера чистых URL .
Он использует server.get, который, похоже, не работает с yoga-graphql.
Я также пытался внедрить next-маршруты в качестве промежуточного программного обеспечения, также не удалось заставить его работать (кажется, что server.get никогда не запускается).
Некоторыеответы, которые я нашел, предполагают наличие отдельного файла для маршрутов next.js с использованием настраиваемого экспресс-сервера и отдельного файла для graphql-yoga.
Я не уверен, как запустить одновременно 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,он продолжает входить в консоль: «Клиент пингуется, но для страницы нет записи: /_error".
localhost / 4444 также выдает ошибку 404 вместо того, чтобы показывать графическую площадку.