与next.js和express.js配合使用并使用会话的最佳实践是什么?

时间:2019-06-11 19:24:54

标签: node.js express next.js express-session

几周以来,我已经开始使用 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的初学者,在此先感谢您的帮助!

1 个答案:

答案 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)
    });