Сбой пользовательских маршрутов на следующих маршрутах при рендеринге на стороне сервера - PullRequest
0 голосов
/ 05 декабря 2018

Я слежу за онлайн-руководством, которое использует next-маршруты для определения пользовательских подстановочных маршрутов, но я не могу заставить его работать.

Мой файл server.js:

const { createServer } = require("http");
const next = require("next");

const app = next({
    dev: process.env.NODE_ENV !== "production"
});

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

const handler = routes.getRequestHandler(app);

app.prepare().then(() => {
    createServer(handler).listen(3000, e => {
        if(e) throw e;
        console.log("Ready on localhost:3000");
    })
})

Мой файл rout.js:

const routes = require("next-routes")();

routes.add("/campaigns/:address(0x[0-9a-fA-F]+)", "campaigns/show");

module.exports = routes;

Мои кампании / show.js

import React from "react";

class CampaignShow extends React.Component {                             
    static getInitialProps(props) {                                
        return {}
    }

    render() {
        return (
            <h3>Campaign Show</h3>
        )
    }
}

export default CampaignShow

Когда я перемещаюсь из приложения в http://localhost:3000/campaigns/0x78E6Fdf23DBA11016c658cc93C4bBb4F63bDAf25, все работает нормально, и я вижустраницу, которую я ожидаю увидеть

Однако, если я попытаюсь открыть эту ссылку напрямую, рендеринг на стороне сервера не будет работать и отобразит страницу с ошибкой 404.Пока консоль выдает не очень полезную ошибку:

Page does not exist: /campaigns/0x78E6Fdf23DBA11016c658cc93C4bBb4F63bDAf25
Error: Page does not exist: /campaigns/0x78E6Fdf23DBA11016c658cc93C4bBb4F63bDAf25
    at http://localhost:3000/_next/1543962700127/page/campaigns/0x78E6Fdf23DBA11016c658cc93C4bBb4F63bDAf25:3:21
    at register (http://localhost:3000/_next/1543962700127/main.js:20505:24)
    at PageLoader.registerPage (http://localhost:3000/_next/1543962700127/main.js:20530:9)
    at http://localhost:3000/_next/1543962700127/main.js:18414:14
    at Array.forEach (<anonymous>)
    at Object.<anonymous> (http://localhost:3000/_next/1543962700127/main.js:18410:30)
    at __webpack_require__ (http://localhost:3000/_next/1543962700127/manifest.js:714:31)
    at fn (http://localhost:3000/_next/1543962700127/manifest.js:117:20)
    at Object.<anonymous> (http://localhost:3000/_next/1543962700127/main.js:13708:9)
    at __webpack_require__ (http://localhost:3000/_next/1543962700127/manifest.js:714:31)

GET http://localhost:3000/campaigns/0x78E6Fdf23DBA11016c658cc93C4bBb4F63bDAf25 404 (Not Found)

Что я делаю не так?

1 Ответ

0 голосов
/ 05 декабря 2018

Добавьте эту строку поверх вашего show

import {withRouter} from 'next/router'

и обновите свой экспорт так:

export default withRouter(CampaignShow)
...