Express应用配置端口

在Express应用创建成功后,应用会自动配置一个端口号,比如3000,有时会遇到端口号被占用的情况,这时就需要修改端口号,下面提供了几种修改端口号的方法。

方法1 静态修改–直接修改代码中配置的默认端口号

根据项目的启动命令,找到项目根目录下bin/www文件,在其中修改默认端口号。

www文件内容如下:(原文件内容)

#!/usr/bin/env node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('mock-data:server');
var http = require('http');

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Normalize a port into a number, string, or false.
 */

function normalizePort(val) {
  var port = parseInt(val, 10);

  if (isNaN(port)) {
    // named pipe
    return val;
  }

  if (port >= 0) {
    // port number
    return port;
  }

  return false;
}

/**
 * Event listener for HTTP server "error" event.
 */

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  var bind = typeof port === 'string'
    ? 'Pipe ' + port
    : 'Port ' + port;

  // handle specific listen errors with friendly messages
  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

/**
 * Event listener for HTTP server "listening" event.
 */

function onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  debug('Listening on ' + bind);
}

修改var port = normalizePort(process.env.PORT || '3000');这一行代码中的端口号即可。


方法2 动态修改–修改代码逻辑使其获取启动命令中的端口号参数

修改如下:
var port = normalizePort(process.env.PORT || '3000');这一行代码修改为如下内容:

/**
 * Get port number from process.argv or process.env or default.
 * process.env属性返回一个包含用户环境信息的对象.
 */
function getPort() {
  if (!!process.argv[2]) { // 如果输入了端口号
    if (isNaN(process.argv[2])) { // 如果端口号不为数字,进行错误提示
      throw 'PORT ERROR: Please enter the correct port number.'
    } else { // 如果端口号输入正确,将使用该端口号
      return process.argv[2]
    }
  } else { // 如果未输入端口号,则获取用户环境信息中的端口号或者使用默认端口号
    return normalizePort(process.env.PORT || '3000');
  }
}
var port = getPort();

上述代码逻辑:

  1. 先从启动命令中获取端口号,如果可以获取到端口号且端口号可用,则使用该端口号,否则报错。
  2. 如果启动命令中没有指定端口号,则获取用户环境信息中的端口号,如果获取到端口号则使用该端口号,如果用户环境信息中不含端口号,则使用默认端口号。

上述代码修改完成后,使用npm start 端口号命令启动即可。

上述配置完成后,可以在多个终端使用不同的端口号启动项目。


相关文章


—— END ——

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值