var express = require(‘express’); var app = express(); app.listen(3000);
和 var express = require(‘express’); var http = require(‘http’); var app = express();
http.createServer(app).listen(80);
利用http 模块创建的server有什么区别吗?
up
app.listen = function(){
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
功力不够,我的理解是:http.createServer是原生方法,接收一个requestListener,而express是封闭了许多方法和处理了req,res等的集合。把它传入则是可以处理这些东西了。app.listen是返回一个promise,参照楼上原生的应该也是一样的意思。
上面那种方法是最基本的写法。而下面那种用法,是反而又使用了http模块(http模块已经被express使用过了),通过createServer函数,为app对象挂载上了很多http模块中的属性和方法,例如多了个listen方法。。。。
感觉我没说明白的样子— —。。。
app.listen(3000);
已经废弃了… orz…
第一种只能使用app使用express的属性和方法; 第二种不但可以使用express的属性和方法,而且还可以使用Http的属性和方法。
个人了解到的是这样的: 1.http是原生的,专做基于http服务的工作,但是在开发中,我们需要不停地通过request.url和request.method来判断你在登录还是注册的操作。 2.connect为了方便开发人员,它封装了http,提供了如日志,文件托管和编写自己的中间件等功能。虽然在获取具体的操作是还是通过request.url和request.method的形式处理,但是它将特定功能的代码,拆分成单个的代码块。 3. express为了更加方便开发人员,它封装了connect,提供了更多的功能,所以你用express创建出来的server对象,可以认为是express的httpServer对象,也可以说是connect的httpServer对象,当然也可以是原生的http对象,越往上功能越完善。 不知道说的对不对,权且看一看,看不懂再聊吧,呵呵
两种有什么区别吗?
要明白这些不看源码怎么行?
请问这种写法废弃了吗 - -。为什么我express app创建自动创建一个应用程序骨架的时候= =(4.x),一开始自动生成的代码还是app.listen(port)的方法?
没区别,请看2楼贴出来的app.listen的源代码。
app就是一个:
function (req, res) {}
同时具备一个属性:
app.listen = function (port) {
http.createServer(this).listen(port);
};
以上。
楼上这段代码正解。
搜了一下,并看了koa和express这部分的代码: koa: /** * Shorthand for: * * http.createServer(app.callback()).listen(…) * * @param {Mixed} … * @return {Server} * @api public */
listen() {
debug('listen');
const server = http.createServer(this.callback());
return server.listen.apply(server, arguments);
}
express:
/**
* Listen for connections.
*
* A node http.Server
is returned, with this
* application (which is a Function
) as its
* callback. If you wish to create both an HTTP
* and HTTPS server you may do so with the “http”
* and “https” modules as shown here:
*
* var http = require(‘http’)
* , https = require(‘https’)
* , express = require(‘express’)
* , app = express();
*
* http.createServer(app).listen(80);
* https.createServer({ … }, app).listen(443);
*
* @return {http.Server}
* @public
*/
app.listen = function listen() {
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
综合koa和express的代码,可以看出,没有区别,但是这两个框架默认都是使用http,若使用https则需要自己收写。