javascript - 如何在 Next.js React Framework 中构建自定义/动态路由

标签 javascript node.js reactjs next.js

我想在框架内实现动态路由,以便根据 CMS 中的页面生成路由。我已阅读文档和 https://github.com/zeit/next.js#custom-server-and-routing看起来它可以完成这项工作。

const express = require('express')
const next = require('next')

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

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

  server.get('/', (req, res) => {
    return app.render(req, res, '/index', req.query)
  })

  server.get('/b', (req, res) => {
    return app.render(req, res, '/test', req.query)
  })

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

  server.listen(3000, (err) => {
    if (err) throw err
    console.log('> Ready on http://localhost:3000')
  })
})

我的问题是,这段代码在项目中放在哪里?我尝试创建 ./server/server.js 但随后需要更新 package.json 中的启动脚本,但这些脚本需要指向 dist 版本如./dist/server/server.js

"scripts": {
    "build": "next build",
    "release": "fly release",
    "pretestonly": "fly pretest",
    "testonly": "cross-env NODE_PATH=test/lib jest \\.test.js",
    "posttestonly": "fly posttest",
    "pretest": "npm run lint",
    "test": "npm run testonly -- --coverage --forceExit --runInBand --verbose --bail",
    "coveralls": "nyc --instrument=false --source-map=false report --temp-directory=./coverage --reporter=text-lcov | coveralls",
    "lint": "standard 'bin/*' 'client/**/*.js' 'examples/**/*.js' 'lib/**/*.js' 'pages/**/*.js' 'server/**/*.js' 'test/**/*.js'",
    "prepublish": "npm run release",
    "precommit": "lint-staged",
    "dev": "node ./dist/server/server.js",
    "start": "NODE_ENV=production node ./dist/server/server.js"
  },

./dist/server/server.js 路径不存在,即使在运行 yarn run build

后也是如此

最佳答案

Next.js 不会转译自定义服务器代码,因此您可以像这样启动它:

"dev": "node ./server/server.js",
"start": "NODE_ENV=production node ./server/server.js"

关于javascript - 如何在 Next.js React Framework 中构建自定义/动态路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43770244/

相关文章:

javascript - 如何在javascript中以dd-mm-yyyy显示dob?

mysql - 我如何同步调用 google-bigquery 删除和插入 API?

html - 样式表 "path/to/font-awesome/css/font-awesome-min.css"未加载,因为它的 MIME 类型 text/html 不是 text/css

javascript - 音量 slider 在单击时正确播放音频文件,但未更改同一元素的按键音量

node.js - 使用 async/await 的 create-react-app 和 JavaScript 依赖项无法编译

javascript - '===' 比 '!==' 更有效吗?

javascript - 如何在执行一次后停止javascript中的focus()函数?

java - 编写将包含在其他网站中的 js 的正确方法是什么?

node.js - 使用 Sequelize 保存图像

javascript - csvtojson 转换器忽略我的文件名,只是将 undefined