美文网首页
http.createServer(express()).lis

http.createServer(express()).lis

作者: Lucky1024 | 来源:发表于2018-10-10 10:43 被阅读0次

    一般使用express的时候,会常见两种写法,一种是

    var app=require('express')();

    app.listen(port,function(){});

    另一种是

    var app=require('express')();

    http.createServer(app).listen(port,function(){});

    由于刚刚开始学习node和express,对于这两种写法有什么区别,为什么可以这么写感觉懵懵的。所以自己去看了一下express的源码:

    express模块中的的lib/express.js

    可以看到,express()其实是返回了一个名为app的function对象,一开始看到function作为对象调用方法,如app.handle、app.init等这种方式有点不习惯,但是其实function也是Object,具备属性方法以及可以调用方法。

    在上面的代码中,使用mixin方法,为app方法添加了EventEmitter.prototype和proto(前面引入的application.js)中的方法。将app上的方法打印出来:

    只截取了部分

    可以看到typeof app输出为function ,我们常用的use 方法、set方法、path方法等都可以在这个function对象上找到。

    所以http.createServer(express())中传入的其实是一个function,和我们常见的http.createServer(function(req,res){})没有本质的区别。

    既然express()只是返回了一个function,那么在上面的第一种写法中server是在何时创建的呢,看到listen方法的代码:

    application.js中listen方法源码

    listen方法调用的时候会调用http.createServer(),并且把当前的app传入进去。所以其实这两种方式本质是一样的。

        第一次发表博客,希望能帮助到和我一样刚刚开始学习的小伙伴。有错误,欢迎指正!

    相关文章

      网友评论

          本文标题:http.createServer(express()).lis

          本文链接:https://www.haomeiwen.com/subject/vcoypftx.html