Конечная точка возвращает 404 при использовании пользовательского сервера Express - PullRequest
0 голосов
/ 10 января 2019

У меня есть приложение Next.js с двумя страницами. Моя структура выглядит следующим образом:

/pages
    /index.js
    /city.js

Я создал собственный сервер, так что если пользователь переходит на что-либо, кроме домашней страницы, он должен отображать city.js. Например, если вы переходите на myapp.com/phl, тогда URL должен оставаться myapp.com/phl, но он должен отображать city.js. То же самое относится, если вы идете на myapp.com/stl.

Вот мой пользовательский сервер:

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

app.prepare()
    .then(() => {
        const server = express();

        server.get('*', (request, response) => {
            return handler(request, response);
        });

        server.get('/:airportCode', (request, response) => {
            console.log('hello from the server');
            app.render( request, response, '/city', { ...request.query, ...request.params } );
        });

        server.listen(3000, error => {
            if (error) throw error;

            console.log('> Ready on http://localhost:3000');
        });
    })
    .catch(exception => {
        console.error(exception.stack);
        process.exit(1);
    });

Когда я захожу на домашнюю страницу, она прекрасно отрисовывает эту страницу, но когда я перехожу на https://myapp.com/phl, я получаю 404. Я что-то упустил?

1 Ответ

0 голосов
/ 10 января 2019

Вам нужно включить обработчик страницы с помощью обработчика страницы звездочкой:

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

app.prepare()
    .then(() => {
        const server = express();

        server.get('/:airportCode', (request, response) => {
            console.log('hello from the server');
            app.render( request, response, '/city', { ...request.query, ...request.params } );
        });

        server.get('*', (request, response) => {
            return handler(request, response);
        });

        server.listen(3000, error => {
            if (error) throw error;

            console.log('> Ready on http://localhost:3000');
        });
    })
    .catch(exception => {
        console.error(exception.stack);
        process.exit(1);
    });

Функция звездочки похожа на запасной вариант для любого пути, который не был обработан предыдущей функцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...