Ответы пользователя по тегу Express.js
  • Почему сессия в Node.js быстро сбрасывается?

    FinGanapre
    @FinGanapre
    secret пробрасывается через переменную окружения. Ваша задача создать файл .env и прописать туда необходимые переменные (коннект к бд, секретный ключ, порт, хост...). Чтобы считать файл, используйте dotenv. Для этого создайте папку config к примеру, в ней файл index.js в котором пропишите экспортируемый объект с необходимым конфигом. Этот объект вы будете использовать для доступа к переменным окружения в других модулях. При подключении библиотеки лучше указать путь к файлу .env полностью (__dirname ...).
    Файл .env не заливается в репозиторий, укажите его в .gitignore
    Если вы про генерацию ключа как последовательности символов, то любой генератор паролей как вариант. Кол-во символов побольше и поехали.
    Ответ написан
    Комментировать
  • Сервер Express в nuxt, как настроить?

    FinGanapre
    @FinGanapre
    Если вопроса не появилось, возможно вы не выбрали SSR при генерации приложения (mode: 'universal' в nuxt.config.js должно быть)

    Примерно так должны выглядеть файлы. В app.js работаем как с обычным express далее, только запуск сервера у нас в index.js, так что в app.js его запускать не нужно, просто экспортируем и импортируем в index.js в котором и запускаем (тут уже всё сделано, просто объяснил)

    Структура:
    server/index.js
    server/app.js

    index.js

    const consola = require('consola')
    const { Nuxt, Builder } = require('nuxt')
    const app = require('./app')
    
    // Import and Set Nuxt.js options
    const config = require('../nuxt.config.js')
    config.dev = process.env.NODE_ENV !== 'production'
    
    async function start () {
      // Init Nuxt.js
      const nuxt = new Nuxt(config)
    
      const { host, port } = nuxt.options.server
    
      await nuxt.ready()
      // Build only in dev mode
      if (config.dev) {
        const builder = new Builder(nuxt)
        await builder.build()
      }
    
      // Give nuxt middleware to express
      app.use(nuxt.render)
    
      // Listen the server
      app.listen(port, host, () => {
    		consola.ready({
    			message: `Server listening on http://${host}:${port}`,
    			badge: true
    		})
    	})
    }
    start()


    app.js

    const express = require('express')
    const app = express()
    
    module.exports = app



    Новый способ:
    nuxt.config.js

    serverMiddleware: {
        '/api': '~/api'
      },



    api/index.js

    const express = require('express')
    
    // Create express instance
    const app = express()
    
    app.get('/', (req, res) => res.status(200).json([{name: "Robert"}, {name: "John"}]))
    
    // Export express app
    module.exports = app
    
    // Start standalone server if directly running
    if (require.main === module) {
      const port = process.env.PORT || 3001
      app.listen(port, () => {
        console.log(`API server listening on port ${port}`)
      })
    }



    pages/index.vue

    <template lang="pug">
      div
        p(v-for="user in users") {{ user.name }}
    </template>
    <script>
    export default {
      async asyncData({ $axios }) {
        const users = await $axios.$get('/api/')
    
        return {
          users,
        }
      },
    }
    </script>

    Ответ написан
    7 комментариев
  • Почему стили и скрипты не грузятся при динамическом url?

    FinGanapre
    @FinGanapre
    Полагаю, вы неверно отдаёте статические ресурсы. Вот документация

    Если в шаблонах указан верный путь до статических файлов и в express вы сконфигурировали отдачу статики правильно, согласно документации, то никаких проблем не будет.

    Если вы использовали данный вариант:
    app.use(express.static(path.join(__dirname, 'public')))


    То в шаблонах пути до папок с css и js должны быть:
    <link rel="stylesheet" href="/css/main.css">
    <script src="/js/main.js"></script>


    При условии, что статика подключена в index.js и структура каталогов следующая:
    index.js
    public/css/main.css
    public/js/main.js
    Ответ написан