几周以来,我已经开始使用 node.js 和 express.js 进行项目,我还添加了 React 在前面的物体。
我使用 express-session 和 connect-mongodb-session 开发了一个完整的会话管理器,效果很好。
我现在要添加一件事以设置所有内容: next.js 。在这里,这对我来说变得更加复杂。
我的目的是拥有与现在相同的东西,但页面之间要平滑过渡。
我开始使用git的官方示例: https://github.com/zeit/next.js/tree/canary/examples/custom-server-express
哪个很好。但是/ page中的页面是公共的?可以通过输入他们的地址来访问它们,这不是很好,因为会话应该完全防水。
我的第一个解决方案是将它们命名为随机名称,这样人们就不能直接访问它们,但这不是很整齐。而且它们仍然可以工作……这会让我写这样的东西:
server.get('/nice_name', (req, res) => {
console.log('loaded') return app.render(req, res, '/uoiuouiorlos_ugly_random_name', req.query) })
我的另一个解决方案是为他们的地址和通话打个路线 (req,res,next)=> next()
这可能有效,但是...很漂亮吗?
另一个解决方案是编辑next.config.js并编写: module.exports = { useFileSystemPublicRoutes:正确, }
效果很好,但随后每个页面都像往常一样加载...那么,重点是什么?
const express = require('express')
const next = require('next')
const port = parseInt(process.env.PORT, 10) || 3000
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
console.log('page loaded')
app.prepare().then(() => {
const server = express()
server.get('/', (req, res) => {
console.log('loaded')
return app.render(req, res, '/1A', req.query)
})
server.get('/space2', (req, res) => {
console.log('loaded')
return app.render(req, res, '/2A', req.query)
})
server.get('*', (req, res) => {
return handle(req, res)
})
server.listen(port, err => {
if (err) throw err
console.log(`> Ready on http://localhost:${port}`)
})
})
我是使用next的初学者,在此先感谢您的帮助!
答案 0 :(得分:0)
现在,如果人们尝试访问实际页面,可以重定向到名为404.js的页面。
express.get('/', (req, res) => {
return app.render(req, res, '/landing_page', req.query);
})
express.get('/landing_page', (req, res) => {
return app.render(req, res, '/404', req.query)
});