ReactJS и Next.js 404 после перезагрузки страницы - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть веб-интерфейс реакции на мой блог Wordpress, и он отлично работает, если я запускаю node server.js.Я могу перезагрузить на любой странице, и она будет работать, как ожидалось.

На моем рабочем сервере, если я запускаю node server.js, он работает нормально.Если я собираю и запускаю npm run start, который настроен на запуск next start -p 80, веб-сайт не работает должным образом.

Вот мой server.js код:

const compression = require('compression');
const express = require("express");
const next = require("next");

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

app

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

    const server = express();

    server.use(compression());
    server.use(express.static(__dirname + '/static', { maxAge: 31557600 }));

    server.get('/about', (req, res) => {
      app.render(req, res, '/about');
    });

    server.get('/post/:slug', (req, res) => {
      const queryParams = { slug: req.params.slug, apiRoute: 'post' };
      app.render(req, res, '/post', queryParams);
    });

    server.get('/page/:slug', (req, res) => {
      const queryParams = { slug: req.params.slug, apiRoute: 'page' };
      app.render(req, res, '/post', queryParams);
    });

    server.get('/city/:slug', (req, res) => {
      const queryParams = { slug: req.params.slug, taxonomy: 'city' };
      app.render(req, res, '/category', queryParams);
    });

    server.get('/country/:slug', (req, res) => {
      const queryParams = { slug: req.params.slug, taxonomy: 'country' };
      app.render(req, res, '/category', queryParams);
    });

    server.get('/_preview/:id/:wpnonce', (req, res) => {
      const queryParams = { id: req.params.id, wpnonce: req.params.wpnonce };
      app.render(req, res, '/preview', queryParams);
    });

    server.get("*", (req, res) => {
      return handle(req, res);
    });

    server.listen(process.env.NODE_PORT, err => {
      if (err) throw err;
      console.log("> Ready on port " + process.env.NODE_PORT);
    });

  })

  .catch(ex => {

    console.error(ex.stack);
    process.exit(1);

  });

Когда сервер работает со следующей, я могу просматривать страницы, и при перезагрузке он работает нормально.Если я попытаюсь загрузить сообщение блога или категорию / город / страну, оно всегда будет 404.

Это проблема с кодом server.js или проблема на страницах React для / post и / category?

1 Ответ

0 голосов
/ 27 апреля 2018

Вам нужно запустить npm run build, а затем npm run start. Сначала нужно собрать пакет, иначе ваши страницы и код nextjs не будут созданы.

Он работает на dev, потому что вам не нужно создавать пакет для dev, к коду обращаются напрямую, но это неэффективно для производства.

Вот обычный код для build и start:

"build": "next build",
"start": "NODE_ENV=production node server.js",

Они должны быть размещены в вашем package.json. Вы, вероятно, уже получили их, поскольку говорите, что работаете npm run start.

Для получения дополнительной информации учебник NextJS проведет вас через это в # 9 основного - Развертывание приложения Next.js

...