大家好,我是节点js的新手,并开始研究和研究一些教程。我只想更好地理解或澄清我的怀疑。所以我遇到了内置模块http
。这有助于创建基本Web服务器。现在express
模块是一个构建在http module
之上的Web框架,可以轻松使用完全嵌入的Web服务器而无需重新发明轮子。现在我遇到了这段代码:
var express = require( 'express' )
, http = require("http")
http.createServer( options, function(req,res)
{
app.handle( req, res );
} ).listen(8080);
但是在快递方面,我们可以简单地做到这一点
var express = require('express');
var app = express();
app.listen(8080, function() {
console.log('Listening on ' + 8080);});
两者之间的区别是什么?不要他们都完成同样的事情。如果不是,那么使用第一种方法的区别和优势是什么。应该遵循第一种方法,因为它是一种很好的编程习惯。这是我的疑问,因为我只是希望清楚地了解是否存在任何差异。
答案 0 :(得分:11)
为什么要将http模块与快速模块结合使用
我们没有理由使用http
模块创建自己的http服务器。快递将为您app.listen()
做到这一点,并保存您的一点点打字。
如果您要创建https
服务器,则需要使用https
模块并将安全凭据传递给https.createServer(...)
,以便创建正确配置的服务器。 Express无法自动为您创建正确配置的https服务器。
如果您查看Express code in GitHub for app.listen()
,就会显示:
app.listen = function listen() {
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
因此,当您使用app.listen()
或创建自己的http服务器,然后使用app
作为该服务器的侦听器时,确实没有区别(除了少一点打字)。
因此,这两个代码片段在功能上是相同的:
var app = require('express')();
app.listen(8080);
app.get('/', function(req, res) {
res.send("hello");
});
上述代码在功能上与:
相同var http = require('http');
var app = require('express')();
http.createServer(app).listen(8080);
app.get('/', function(req, res) {
res.send("hello");
});
当然,如果您尝试设置https服务器或向.createServer()
方法添加自定义选项,那么您将首先设置自己的服务器,然后将app
传递给它作为倾听者。 <{1}}只是默认app.listen(...)
正常工作时的快捷方式。