• 2022331 express app.listen引发的思考(1)


    最近看到express,有串代码理解上出了点问题;

    var server = app.listen(8081, function () {//应用启动端口为8081
    
        var host = server.address().address;
        var port = server.address().port;
    
        console.log("应用实例,访问地址为 http://%s:%s", host, port)
    
    });
    

    这是那个代码块的内容
    开始我不太理解,用host变量来接收,server.address().address;
    这是个什么意思,这里的server是什么呢,就好比

    看着他是指代的var生明的server变量,但是为什么他可以调用address()这个方法,所以等号的右边应该是一个对象才对;
    在js语境中,server就是一个变量,而且他的数据类型是一个对象。

    那么现在要搞清楚,app.listen是什么,显然他是express的api;

    所以我去查了,express官网,这个传参的格式着实有点看不懂;

    image
    翻译:

    绑定并侦听指定主机和端口上的连接。此方法与节点的http.服务器听我说 相同。如果端口被省略或为0,操作系统将分配一个任意未使用的端口,这对于自动化任务(测试等)等情况很有用。
    var express = require('express')
    var app = express()
    app.listen('/tmp/sock')
    
    express()返回的应用程序实际上是一个JavaScript函数,旨在作为回调传递给节点的HTTP服务器,以处理请求。这使得为应用程序的HTTP和HTTPS版本提供相同的代码基础变得很容易,因为应用程序不会继承这些代码(它只是一个回调):
    var express = require('express')
    var https = require('https')
    var http = require('http')
    var app = express()
    
    http.createServer(app).listen(80)
    https.createServer(options, app).listen(443)
    
    应用程序。方法返回一个http服务器对象,和(对于HTTP)是一种方便的方法,用于:
    app.listen = function () {
      var server = http.createServer(this)
      return server.listen.apply(server, arguments)
    }
    
    注意:所有形式的节点的http。服务器listen()方法实际上是受支持的。
    

    打印一下,该服务对象的那个方法:
    image

    [未完,待续。。。]

  • 相关阅读:
    bless for you...
    Unity3D 热更新方案(集合各位专家的汇总)
    Unity与iOS原生代码之间的相互调用
    unity android相互调用
    unity3d资源打包总结
    Unity3D热更新LuaFramework入门实战
    unity插件开发
    Unity3D性能优化总结
    正确释放Vector的内存
    CCLuaObjcBridge
  • 原文地址:https://www.cnblogs.com/1998Archer/p/16081307.html
Copyright © 2020-2023  润新知