为什么将http模块与快速模块结合使用

时间:2016-03-26 19:03:13

标签: node.js

大家好,我是节点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);});

两者之间的区别是什么?不要他们都完成同样的事情。如果不是,那么使用第一种方法的区别和优势是什么。应该遵循第一种方法,因为它是一种很好的编程习惯。这是我的疑问,因为我只是希望清楚地了解是否存在任何差异。

1 个答案:

答案 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(...)正常工作时的快捷方式。