Node.js 代码功能模块解析:从启动到监听
Node.js 代码功能模块解析:从启动到监听
本文将分析以下 Node.js 代码片段,并解释其主要功能模块:
#!/usr/bin/env node
/**
* Module dependencies.
*/
var app = require('../app');
var debug = require('debug')('zurveys: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);
console.log('Open browser and enter: http://localhost:3000')
/**
* 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);
}
主要功能模块:
-
引入依赖模块:
app: 引入 Express 应用实例,处理路由等逻辑。debug: 用于调试信息的输出。http: Node.js 内置模块,用于创建 HTTP 服务器。
-
获取端口号并存储在 Express 中:
- 从环境变量
process.env.PORT获取端口号,默认为 3000。 - 使用
normalizePort函数对端口号进行标准化处理。 - 将标准化后的端口号存储在 Express 应用实例
app中。
- 从环境变量
-
创建 HTTP 服务器:
- 使用
http.createServer(app)创建 HTTP 服务器实例。 - 将 Express 应用实例
app作为参数传入,以便处理 HTTP 请求。
- 使用
-
监听端口,启动服务器:
- 使用
server.listen(port)在指定端口上监听连接请求,启动 HTTP 服务器。 server.on('error', onError): 监听服务器 'error' 事件,处理错误情况。server.on('listening', onListening): 监听服务器 'listening' 事件,输出服务器启动信息。
- 使用
-
标准化端口号:
normalizePort(val)函数用于将输入值转换为有效的端口号。- 如果输入值为数字,则直接返回。
- 如果输入值为字符串且可以转换为数字,则返回转换后的数字。
- 否则返回 false。
-
处理 'error' 事件:
onError(error)函数用于处理 HTTP 服务器发生的错误事件。- 根据错误类型
error.code进行不同的处理,例如端口被占用等。
-
处理 'listening' 事件:
onListening()函数用于处理 HTTP 服务器成功监听端口后的事件。- 输出服务器监听的地址和端口信息。
通过以上分析,我们可以清晰地了解这段代码的功能模块划分,以及每个模块的作用。这对于理解 Node.js Web 应用的基本结构和运行机制非常有帮助。
原文地址: https://www.cveoy.top/t/topic/f2vt 著作权归作者所有。请勿转载和采集!