首页 > 解决方案 > 节点服务器端口在开发过程中不断“插入”

问题描述

我已经用 MySQL 开发了一个多月的 MEVN 应用程序。我正在使用一个名为 MEVN-CLI 的框架,但这并不重要。

每当我收到此错误时,我总是不得不每隔几天更改我的服务器端口:

[nodemon] 2.0.3
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,html,css,json,md
[nodemon] starting `node run server.js --port 9000/api --open`
events.js:288
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE: address already in use :::3000
    at Server.setupListenHandle [as _listen2] (net.js:1309:16)
    at listenInCluster (net.js:1357:12)
    at Server.listen (net.js:1445:7)
    at Function.listen (C:\Dev\Projects\node-mysql\server\node_modules\express\lib\application.js:618:24)
    at Object.<anonymous> (C:\Dev\Projects\node-mysql\server\server.js:258:5)
    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)
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: 3000
}

我在 9000、3000、3002、8000 等之间进行更改。我想将它保留在一个端口上,但这种情况一直在发生,我找不到导致它的原因。

我有一个客户端和一个服务器,它们与 Axios 通信,我的服务器与我在其他地方托管的 MySQL 服务器通信,但我也认为这无关紧要,但我认为分享它不会有什么坏处。

这是我的服务器:

const port = process.env.PORT || 4000;
const env = require("./env.json");
const express = require("express");
const mysql = require("mysql");
const path = require("path");
const bodyParser = require("body-parser");
const favicon = require("serve-favicon");
const app = express();
const cors = require("cors");
const {
  testColumns,
  showUsers,
  searchResultColumns,
  showAccountColumns
} = require("./mysql/columns");
app.use(bodyParser.json());
app.use(favicon(path.join(__dirname, "public", "favicon.ico")));
app.use(cors());

//* Build MySQL Connection
const db = mysql.createConnection({
  host: env.server,
  user: env.user,
  password: env.pass,
  database: env.schema
});

//* Connect to Database
db.connect((err) => {
  if (err) {
    console.log("Error Connecting:", err);
  }
  console.log("MySQL Connected...");
});

app.get(`/api/v1/:query/:x`, (req, res) => {
[Business Logic - Works fine]
    if (err) {
      // If error
      console.log(err);
    }
    // If no results
    else if (results == 0) {
      res.send(`No Results\n ${results} \n - ${err}`);
      return;
    }
    // If successful
    res.send(results);
  });
});

app.get(`/api/v1/:query/`, (req, res) => {
[Business Logic - Works fine]
    if (err) {
      // If error
      console.log(err);
    }
    // If no results
    else if (results == 0) {
      res.send(`No Results\n ${results} \n - ${err}`);
      return;
    }
    // If successful
    res.send(results);
  });
});

//* Root Handler
app.get("/", (req, res) =>
  res.sendFile(path.join(__dirname + "/public/index.html"))
);

//? Error Handler
app.get("/404", (req, res) =>
  res.sendFile(path.join(__dirname + "/public/404.html"))
);

//! Error Handler
app.get("/sample", (req, res) =>
  res.sendFile(path.join(__dirname + "/public/sample.html"))
);

//? Listen for server port
app.listen(port, () => {
  console.log(`Sample Dev Server at:${port}`);
});

我删除了一些不相关的东西,因为它有数百条类似的行,我还没有抽象出我的路由。

这是我的路由器:

import Vue from "vue";
import Router from "vue-router";
import Home from "./views/Home.vue";
import NotFound from "./views/NotFound.vue";

Vue.use(Router);

export default new Router({
  mode: "history",
  base: process.env.BASE_URL,
  routes: [
    {
      path: "/",
      name: "Home",
      component: Home
    },
    {
      path: "/NotFound",
      name: NotFound,
      component: () => import("./views/NotFound.vue")
    },
    {
      path: "/search",
      component: searchPage,
      children: [
        { path: "/search/byName", component: searchByName },
        { path: "/search/china", component: searchByNumber }
      ]
    }
  ]
});

如果它是相关的,这是我的 packages.json 文件:

{
  "name": "vmax",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },
  "dependencies": {
    "axios": "^0.19.2",
    "core-js": "^3.6.4",
    "vue": "^2.6.11",
    "vue-router": "^3.1.6",
    "vuetify": "^2.2.11"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "~4.3.0",
    "@vue/cli-plugin-eslint": "~4.3.0",
    "@vue/cli-service": "~4.3.0",
    "babel-eslint": "^10.1.0",
    "eslint": "^6.7.2",
    "eslint-plugin-vue": "^6.2.2",
    "sass": "^1.19.0",
    "sass-loader": "^8.0.0",
    "vue-cli-plugin-vuetify": "~2.0.5",
    "vue-template-compiler": "^2.6.11",
    "vuetify-loader": "^1.3.0"
  },
  "eslintConfig": {
    "root": true,
    "env": {
      "node": true
    },
    "extends": [
      "plugin:vue/essential",
      "eslint:recommended"
    ],
    "parserOptions": {
      "parser": "babel-eslint"
    },
    "rules": {}
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not dead"
  ]
}

我刚刚更改为端口 4000,它正在工作,只是发现但有问题导致我必须每隔几天更改一次服务器端口。

标签: javascriptnode.jsvue.jsvuetify.jsvue-router

解决方案


可能端口正在使用中。要终止程序端口,

$ killall -9 node

推荐阅读