Ошибка сервера [Error: listen EADDRINUSE: address already in use :::3000]

node:events:497
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE: address already in use :::3000
    at Server.setupListenHandle [as _listen2] (node:net:1904:16)
    at listenInCluster (node:net:1961:12)
    at Server.listen (node:net:2063:7)
    at Function.listen (C:\Users\User\dev\node_modules\express\lib\application.js:635:24)
    at Object.<anonymous> (C:\Users\User\dev\taskManager\server.js:8:5)
    at Module._compile (node:internal/modules/cjs/loader:1469:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
    at Module.load (node:internal/modules/cjs/loader:1288:32)
    at Module._load (node:internal/modules/cjs/loader:1104:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:174:12)
Emitted 'error' event on Server instance at:
    at emitErrorNT (node:net:1940:8)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
  code: 'EADDRINUSE',
  errno: -4091,
  syscall: 'listen',
  address: '::',
  port: 3000
}

Я создал сервер, соответственно захотел его проверить. Ввёл команду node server.js для иницилизации сервера. Не запустился пробую второй раз, выдает эту ошибку. Возможно дело в том что я неправильно запустил сервер?

Это значит что уже запущен сервер слушающий 3000 порт.

Найти в списке процессов все nodejs процессы и убей их. Скорее всего это остался запущенный сервер с предыдущего запуска твоего проекта.

Однако редко бывает что другие программы занимают 3000 порт. Тогда тебе надо найти метод поиска программы занимающей 3000 порт для твоей операционной системы. Зная что это за программа можно уже решать что делать: менять ее настройки, убивать ее перед запуском своего сервера итд.

Да, я вчера как раз просматривал возможние варианты такой ошибки и наткнулся в процессах сервер, убил его и заново запустил) только вот странно что когда я запускаю сервер, то у меня нету окна которое обычно появляеться внизу ВС кода. Я обычно через него сервер отключал, а теперь почему-то не появляеться, к тому же сайт который должен работать через localhost:3000 тоже перестал работать и вечно грузиться.

То что у тебя уже есть проект запускаемый на 3000 порту будет усложнять ситуацию.

Невозможно иметь 2 сервера слушающих один и тот же порт.

Попробуй переехать на порт 3001 в новом проекте, и оставить 3000 для того сайта что у же был.

Похоже что какой-то сервер запущен, но он не генерирует ответ (из-за конкретики кода, типа нет явного res.send или хендлера для всех путей через звездочку). Скорее всего это сервер твоего нового проекта, и ты пытаешься запрашивать пути с существующего сайта.

Это вопрос интеграции vscode. Где, что и почему “отвалилось” сложно сказать из словестного описания (плюс мой опыт с vscode ограничен).

const express = require('express');
const pool = require('./connection.js');
const app = express();
const PORT = 3000;

app.use(express.json);

app.listen(PORT, () => {
  console.log('Server running on port 3000');
});
// "get" request reaction
app.get('/tasks', async (req, res) => {
  try {
    const tasks = await pool.query('SELECT * FROM tasks');
    res.json(tasks.rows);
  } catch (err) {
    console.error(err.message);
  }
});
// create new task
app.post('/tasks', async (req, res) => {
  try {
    const { title, description, due_date } = req.body;
    const newTask = { title: req.body.title };
    tasks.push(newTask);
    res.status(201).json(newTask);
    res.json(newTask.rows[0]);
  } catch (err) {
    console.error(err.message);
  }
});
// update task
app.put('/tasks/:id', async (req, res) => {
  try {
    const { id } = req.params;
    const { title, description, status, due_date } = req.body;
    await pool.query(
      'UPDATE tasks SET title = $1, description = $2, status = $3, due_date = $4 WHERE id = $5',
      [title, description, status, due_date, id]
    );
    res.json('Task update');
  } catch (err) {
    console.error(err.message);
  }
});
// delete task
app.delete('/tasks/:id', async (req, res) => {
  try {
    const { id } = req.params;
    await pool.query('DELETE FROM tasks WHERE id = $1', [id]);
    res.json('Task Deleted');
  } catch (err) {
    console.error(err.message);
  }
});

В общем да, у меня нету res.send ответа, но хочу уточнить, что другого сервера который использует 3000 порт нету, так что в этом ошибки не должно быть. Да и не совсем понимаю что мне отправлять через res.send. Надо будет изучить этот вопрос )

Когда код попадает в ветку ошибки, не происходит res.send, то запрос на “завершается” экспресом (данные не отправляются обратно клиенту) и запрос продолжает ожидаться браузером (то что ты наблюдаешь). Со временем включается браузерный защитный механизм когда запрос ожидается дольше Х времени.

Добавь отсылку ответа в блоках catch.

О, у меня как раз есть пример с обработкой ошибок экспрессом. Обрати внимание что все возможные ветки выполнения кода заканчиваются отправкой ответа клиенту. Тебе надо реализовать подобное поведение.

Спасибо за ответ) Ситуация разъяснилась, буду пытаться исправлять ошибки.