Nodejs中express里http.createServer和app.listen有什么区别?
Nodejs中express里http.createServer和app.listen有什么区别?
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有什么区别吗?
Node.js 中 Express 里 http.createServer
和 app.listen
的区别
在使用 Express 构建 Web 应用时,你可能会遇到两种不同的方法来启动服务器:一种是直接使用 Express 的 app.listen
方法,另一种是通过 Node.js 的 http.createServer
方法。这两种方法虽然最终都能达到启动服务器的目的,但在实现方式和适用场景上有所不同。
1. app.listen
这是 Express 提供的一个便捷方法,用于快速启动 HTTP 服务器。它内部封装了 Node.js 的 http.createServer
方法,并且做了许多简化处理。通常情况下,使用 app.listen
是最简单和最直接的方式。
示例代码:
var express = require('express');
var app = express();
// 使用 app.listen 启动服务器
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
2. http.createServer
这是 Node.js 核心模块 http
提供的方法,用于创建一个 HTTP 服务器。你可以将 Express 应用(即 app
对象)作为参数传递给 createServer
方法,从而让 Express 处理请求。这种方法更灵活,因为它允许你在创建服务器时添加更多自定义逻辑。
示例代码:
var express = require('express');
var http = require('http');
var app = express();
// 使用 http.createServer 创建服务器
http.createServer(app).listen(80, () => {
console.log('Server is running on port 80');
});
区别总结
- 简洁性:
app.listen
更简洁,适合快速搭建简单的应用。 - 灵活性:
http.createServer
更灵活,可以让你在创建服务器时添加额外的中间件或处理逻辑。 - 内部实现:
app.listen
实际上是调用了http.createServer
,但提供了更多的默认配置和便利方法。
在大多数情况下,如果你只是想快速搭建一个简单的 Express 应用,使用 app.listen
就足够了。而如果你需要对服务器有更精细的控制,或者想要添加一些特殊的处理逻辑,那么使用 http.createServer
会是一个更好的选择。
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的源代码。
楼上这段代码正解。
http.createServer
和 app.listen
在 Express 中有不同的使用场景和功能。
-
app.listen
: 这是 Express 提供的一个简化的方法来启动一个 HTTP 服务器。当你调用app.listen(3000)
时,Express 会自动创建一个 HTTP 服务器并将应用(即app
)绑定到该服务器上。这使得代码更简洁,更易于理解。示例代码:
var express = require('express'); var app = express(); app.get('/', function (req, res) { res.send('Hello World!'); }); app.listen(3000, () => console.log('Example app listening on port 3000!'));
-
http.createServer
: 这是 Node.js 的原生http
模块提供的方法。它允许你创建一个 HTTP 服务器,并将 Express 应用作为请求处理程序传递给服务器。这提供了更大的灵活性,因为你可以为同一个服务器添加多个不同的处理程序或中间件。示例代码:
var express = require('express'); var http = require('http'); var app = express(); app.get('/', function (req, res) { res.send('Hello World!'); }); var server = http.createServer(app); server.listen(80, () => console.log('Server is running on port 80'));
总结
- 使用
app.listen
是更简洁的方式,适合大多数情况。 - 使用
http.createServer
提供了更多的控制权和灵活性,特别是在你需要在一个服务器上运行多个不同的服务时。
两者都能实现相同的功能,选择哪个取决于你的具体需求。