Узел: HTTPS-сервер перестает работать с ошибкой EADDRINUSE - PullRequest
1 голос
/ 04 апреля 2020

Я настроил узел и Express HTTPS-сервер на машине Raspbian следующим образом:

const bodyParser = require('body-parser');
const express = require('express');
const multer = require('multer');
const https = require('https');
const cors = require('cors');
const fs = require('fs');
const upload = multer();
const app = express();
const codes = require('./codes.js');

let privateKey = fs.readFileSync('/home/pi/Desktop/padscape/server/private.key', 'utf-8');
let certificate = fs.readFileSync('/home/pi/Desktop/padscape/server/server.cert', 'utf-8');
let credentials = {key: privateKey, cert: certificate};

app.get('/', (req, res) => {
    res.writeHead(400, {'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*'});
    res.end(JSON.stringify({'Error': 'Bad Request'}));
});

app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static(__dirname, {dotfiles: 'allow'}));
app.use(bodyParser.json());
app.use(upload.array());
app.use(cors());
app.use('/code', codes);
app.on('error', err => {
    console.log(`Error: ${err}`);
});

let httpsServer = https.createServer(credentials, app);
httpsServer.listen(443);

Я хочу запустить сервер при загрузке, поэтому я добавил это к /home/pi/.bashrc:

echo "RUNNING ON BOOT"
sudo fuser 443/tcp
sudo node /home/pi/Desktop/padscape/server/app.js &> ~/padscape_log.txt &

Когда я запускаю Raspberry Pi, я вижу следующую ошибку в журнале ошибок:

events.js:288
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE: address already in use :::443
    at Server.setupListenHandle [as _listen2] (net.js:1309:16)
    at listenInCluster (net.js:1357:12)
    at Server.listen (net.js:1445:7)
    at Object.<anonymous> (/home/pi/Desktop/padscape/server/app.js:31:13)
    at Module._compile (internal/modules/cjs/loader.js:1158:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at internal/main/run_main_module.js:18:47
Emitted 'error' event on Server instance at:
    at emitErrorNT (net.js:1336:8)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  code: 'EADDRINUSE',
  errno: 'EADDRINUSE',
  syscall: 'listen',
  address: '::',
  port: 443
}

Я попытался изменить порт с 443 на 8443, но безуспешно. Как видите, sudo fuser 443/tcp должен убить все службы в порту 443. Что мне делать?

1 Ответ

0 голосов
/ 06 апреля 2020

Оказывается, я не должен запускать файл с .bashrc. Этот файл может запускаться при запуске, но он также запускается, когда я открываю новый терминал командной строки! Я использовал несколько терминалов одновременно, и это вызвало несколько ошибок! Итак, я удалил свою команду из .bashrc и использовал /etc/rc.local для ее запуска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...