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);
}

主要功能模块:

  1. 引入依赖模块:

    • app: 引入 Express 应用实例,处理路由等逻辑。
    • debug: 用于调试信息的输出。
    • http: Node.js 内置模块,用于创建 HTTP 服务器。
  2. 获取端口号并存储在 Express 中:

    • 从环境变量 process.env.PORT 获取端口号,默认为 3000。
    • 使用 normalizePort 函数对端口号进行标准化处理。
    • 将标准化后的端口号存储在 Express 应用实例 app 中。
  3. 创建 HTTP 服务器:

    • 使用 http.createServer(app) 创建 HTTP 服务器实例。
    • 将 Express 应用实例 app 作为参数传入,以便处理 HTTP 请求。
  4. 监听端口,启动服务器:

    • 使用 server.listen(port) 在指定端口上监听连接请求,启动 HTTP 服务器。
    • server.on('error', onError): 监听服务器 'error' 事件,处理错误情况。
    • server.on('listening', onListening): 监听服务器 'listening' 事件,输出服务器启动信息。
  5. 标准化端口号:

    • normalizePort(val) 函数用于将输入值转换为有效的端口号。
    • 如果输入值为数字,则直接返回。
    • 如果输入值为字符串且可以转换为数字,则返回转换后的数字。
    • 否则返回 false。
  6. 处理 'error' 事件:

    • onError(error) 函数用于处理 HTTP 服务器发生的错误事件。
    • 根据错误类型 error.code 进行不同的处理,例如端口被占用等。
  7. 处理 'listening' 事件:

    • onListening() 函数用于处理 HTTP 服务器成功监听端口后的事件。
    • 输出服务器监听的地址和端口信息。

通过以上分析,我们可以清晰地了解这段代码的功能模块划分,以及每个模块的作用。这对于理解 Node.js Web 应用的基本结构和运行机制非常有帮助。

Node.js 代码功能模块解析:从启动到监听

原文地址: https://www.cveoy.top/t/topic/f2vt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录