HTTPS на локальном хосте с использованием NextJS + Express - PullRequest
1 голос
/ 22 марта 2019

Информация о системе

Цель

Обслуживание веб-приложения с использованием SSL через HTTPS на локальном хосте

Что сделано

  1. Создано базовое приложение NextJS с использованием Создать следующее приложение
  2. Сгенерировал сертификат и ключ с использованием OpenSSL и переместил его в каталог проекта
  3. Добавил зависимость Express
  4. Настроил приложение для использования экспресса внутри server.js
  5. Изменен скрипт для использования server.js внутри package.json скриптов.

server.js

const express = require('express');
const next = require('next');
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();
const port = 3000;

const https = require('https');
const fs = require('fs');
const httpsOptions = {
  key: fs.readFileSync('./certificates/key.pem'),
  cert: fs.readFileSync('./certificates/cert.pem')
};

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

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

    server.listen(port, err => {
      if (err) throw err;
      console.log('> Ready on http://localhost: ' + port);
    });
  })
  .catch(ex => {
    console.error(ex.stack);
    process.exit(1);
  });

ExtraИнформация

Приложение в настоящее время работает при инициализации с использованием yarn dev.Я пытался обслужить приложение через https, используя этот ответ , но я не смог выяснить, как применить это к моей текущей настройке с помощью NextJS.

Я потратил много времени на исследованиеВ Интернете, как применить это решение, но еще не нашли способ заставить это работать.

Любая помощь очень ценится.

1 Ответ

4 голосов
/ 22 марта 2019

Вам просто нужно использовать метод createServer модуля https.

const { createServer } = require('https');
const { parse } = require('url');
const { readFileSync } = require('fs');
const next = require('next');

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

const httpsOptions = {
  key: readFileSync('./certificates/key.pem'),
  cert: readFileSync('./certificates/cert.pem')
};

app.prepare()
  .then(() => {
    createServer(httpsOptions, (req, res) => {
      const parsedUrl = parse(req.url, true);
      handle(req, res, parsedUrl);
    }).listen(port, err => {
      if (err) throw err;
      console.log(`> Ready on https://localhost:${port}`);
    })
  });
...