Добавление URL-адреса в маршрутизацию Next Js для получения пути TypeError должно быть строкой типа, получающей объект типа - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь добавить слаг: id в URL для записи блога в моем приложении next.js.Это работает, если я просто перехожу по ссылке из приложения на страницу, но если я обновляю страницу в сообщении или получаю прямой доступ к странице, я получаю следующую ошибку:

TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received type object
    at assertPath (path.js:39:11)
    at extname (path.js:835:5)
    at new View (E:\Web Pages\React Apps\Full Stack\Nextjs-Blog\node_modules\express\lib\view.js:56:14)
    at Function.render (E:\Web Pages\React Apps\Full Stack\Nextjs-Blog\node_modules\express\lib\application.js:570:12)
    at app.get (E:\Web Pages\React Apps\Full Stack\Nextjs-Blog\server.js:31:16)
    at Layer.handle [as handle_request] (E:\Web Pages\React Apps\Full Stack\Nextjs-Blog\node_modules\express\lib\router\layer.js:95:5)
    at next (E:\Web Pages\React Apps\Full Stack\Nextjs-Blog\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (E:\Web Pages\React Apps\Full Stack\Nextjs-Blog\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (E:\Web Pages\React Apps\Full Stack\Nextjs-Blog\node_modules\express\lib\router\layer.js:95:5)
    at E:\Web Pages\React Apps\Full Stack\Nextjs-Blog\node_modules\express\lib\router\index.js:281:22
    at param (E:\Web Pages\React Apps\Full Stack\Nextjs-Blog\node_modules\express\lib\router\index.js:354:14)
    at param (E:\Web Pages\React Apps\Full Stack\Nextjs-Blog\node_modules\express\lib\router\index.js:365:14)
    at Function.process_params (E:\Web Pages\React Apps\Full Stack\Nextjs-Blog\node_modules\express\lib\router\index.js:410:3)
    at next (E:\Web Pages\React Apps\Full Stack\Nextjs-Blog\node_modules\express\lib\router\index.js:275:10)
    at jsonParser (E:\Web Pages\React Apps\Full Stack\Nextjs-Blog\node_modules\body-parser\lib\types\json.js:110:7)
    at Layer.handle [as handle_request] (E:\Web Pages\React Apps\Full Stack\Nextjs-Blog\node_modules\express\lib\router\layer.js:95:5)
    at trim_prefix (E:\Web Pages\React Apps\Full Stack\Nextjs-Blog\node_modules\express\lib\router\index.js:317:13)
    at E:\Web Pages\React Apps\Full Stack\Nextjs-Blog\node_modules\express\lib\router\index.js:284:7
    at Function.process_params (E:\Web Pages\React Apps\Full Stack\Nextjs-Blog\node_modules\express\lib\router\index.js:335:12)
    at next (E:\Web Pages\React Apps\Full Stack\Nextjs-Blog\node_modules\express\lib\router\index.js:275:10)
    at expressInit (E:\Web Pages\React Apps\Full Stack\Nextjs-Blog\node_modules\express\lib\middleware\init.js:40:5)
    at Layer.handle [as handle_request] (E:\Web Pages\React Apps\Full Stack\Nextjs-Blog\node_modules\express\lib\router\layer.js:95:5)

Я прочитал документацию Next Js Docs со ссылкой , и я делаю это точно так, как описано.

Вот мой код:

server.js

nextApp.prepare().then(() => {
  const app = express();
  app.use(express.json());

  app.get('/post/:id', (req, res) => {
    return app.render(req, res, '/post', { id: req.params.id });
  });

  app.get('*', (req, res) => {
    return handle(req, res);
  });

  app.listen(PORT, err => {
    if (err) throw err;
    console.log(`ready at http://localhost:${PORT}`);
  });
});

Ссылка настраница

<Link as={`/post/${post._id}`} href={`/post?id=${post._id}`}>
  <a>Link text</a>
</Link>

В соответствии с документацией это должно быть написано.Я не уверен, какие шаги я пропустил или, возможно, есть проблема с веб-пакетом или чем-то.Если вам нужна дополнительная информация, дайте мне знать, что любая помощь будет признательна.

1 Ответ

2 голосов
/ 23 марта 2019

Вместо рендеринга приложения express цель здесь - передать запрос NextJS.

Изменить визуализацию на:

app.get('/post/:id', (req, res) => {
    return nextApp.render(req, res, '/post', { id: req.params.id });
});

Пример

...