在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();
上述代码逻辑:
- 先从启动命令中获取端口号,如果可以获取到端口号且端口号可用,则使用该端口号,否则报错。
- 如果启动命令中没有指定端口号,则获取用户环境信息中的端口号,如果获取到端口号则使用该端口号,如果用户环境信息中不含端口号,则使用默认端口号。
上述代码修改完成后,使用npm start 端口号
命令启动即可。
上述配置完成后,可以在多个终端使用不同的端口号启动项目。
相关文章
—— END ——