Каковы лучшие практики для работы с next.js и express.js и использования сессий - PullRequest
0 голосов
/ 11 июня 2019

в течение нескольких недель я начал проект, используя 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: true,}

это прекрасно работает, но тогда каждая страница загружается так, как они обычно делают ... Так какой в ​​этом смысл?

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}`)
})
})

Я новичок, использующий следующий, спасибо взаранее за вашу помощь!

1 Ответ

0 голосов
/ 12 июня 2019

на данный момент перенаправление на страницу с именем 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)
    });
...