【问题标题】:What does normalizePort() function do in Nodejs?NormalizePort() 函数在 Nodejs 中的作用是什么?
【发布时间】:2019-09-23 03:01:41
【问题描述】:

我正在浏览this answer 然后我看到了这行代码:

var port = normalizePort(process.env.PORT || '4300');

为什么不

var port = (process.env.PORT || '4300');

从这个博客有一个解释是:

normalizePort(val) 函数只是将端口标准化为数字、字符串或 false。

我还是不明白。然后我检查一下什么是标准化here。我有一些想法,但我还是不明白。

normalizePort() 函数的目的是什么?

如果我们不使用它会发生什么?

(一个真正帮助我理解的例子)谢谢。

【问题讨论】:

    标签: node.js express normalize


    【解决方案1】:

    normalizePort 函数是在 express-generator 中引入的,它是 Express 团队的样板。

    来自生成器代码:

    /**
     * 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;
    }
    

    解释: 这个函数是一个安全保护,确保提供的端口是number,如果不是数字则为string,如果有其他设置为false。

    如果您自己将端口提供给环境变量并确保端口始终通过某种配置成为数字,那么您真的不需要 normalizePort 函数,这就是您问题的答案:

    为什么不

    var port = (process.env.PORT || '4300');

    【讨论】:

    • 返回 false 的不仅仅是 undefined。
    • 为什么评论说named pipe
    【解决方案2】:

    我认为这将有助于阅读页面的这一部分

    https://brianflove.com/2016/03/29/typescript-express-node-js/

    【讨论】:

      【解决方案3】:

      normalizePort() 的作用如下:

      /**
       * 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;
      }
      

      在大多数情况下,您基本上希望您的端口是一个数字而不是一个字符串。但是在某些情况下,您可能希望传递非数字字符串,例如命名管道、套接字等。这只是将解析为数字的字符串转换为数字,而只保留常规字符串。

      【讨论】:

        【解决方案4】:

        来自Express Generator的source

        function normalizePort(val) {
          var port = parseInt(val, 10);
        
          if (isNaN(port)) {
            // named pipe
            return val;
          }
        
          if (port >= 0) {
            // port number
            return port;
          }
        
          return false;
        }
        
        1. 执行 parseInt,如果可能的话,它基本上将值转换为整数。
        2. 检查值是否不是数字。
        3. 检查是否是有效的端口值。

        如果您是在代码中提供值的人,则不需要该函数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-07-27
          • 2014-10-16
          • 2021-07-27
          • 1970-01-01
          • 2015-04-08
          • 2018-09-09
          • 2018-10-08
          • 2021-08-14
          相关资源
          最近更新 更多