为什么要结合http模块和express模块

EI-01

大家好,我是Node js的新手,并开始研究和研究一些教程。我只是想更好地理解或澄清我的疑问。所以我遇到了内置模块http这有助于创建一个基本的Web服务器。现在,express模块是一个建立在该框架之上的Web框架,http module可以轻松使用完全楔入的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);});

两者有什么区别?他们俩都做不到同样的事情。如果不是,使用第一种方法有什么区别和优势。是否应该坚持第一种方法,因为这是一种好的编程习惯。这是我的疑问,因为如果有任何区别,我只想清楚地了解。

jfriend00

为什么要结合http模块和express模块

确实没有理由使用该http模块创建自己的http服务器Express会为您做到这一点,app.listen()并节省您一点点输入。

如果要创建https服务器,则需要使用该https模块并将安全凭证传递给它https.createServer(...),以创建正确配置的服务器。Express无法自动为您创建正确配置的https服务器。


如果您查看GitHubapp.listen()中的Express代码,它将显示以下内容:

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其作为侦听器传递给它。app.listen(...)当默认http.createServer()工作正常时,它只是一个快捷方式

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

http模块和express模块有什么区别?

导入模块和子模块。为什么要进口两次?

为什么要删除__init__.py中的模块?

为什么要结合霍夫曼和lz77?

SocketIO服务器,Express和http模块

为什么需要将Express服务器实例作为参数传递给Node.JS中的http模块?

为什么环境声明使用名称空间和模块?

http和https模块在Node中做什么?

NodeJS http和https模块之间有什么区别?

Laravel:为什么邮件要发送到所有模块?

Python3中的__builtin__模块在哪里?为什么要改名?

(没有名为sqlalchemy的模块)但是为什么要安装它

为什么要修改linux内核而不是创建内核模块?

为什么 dkms 状态“警告!内置模块和已安装模块之间的差异”会发生?

IntelliJ IDEA和Gradle:为什么每个子模块有3个模块?

为什么我的gradle项目在Intellij Idea中创建主模块和测试模块

为什么会有模块选项和驱动程序选项-例如i915模块?

为什么在“导入模块”和“从模块导入*”中,全局变量的行为不同?

模块:何时以及为什么?

为什么Ansible需要模块?

为什么不能加载模块?

NodeJS http模块:什么是requestListener?

Qt QML模块,如何导入它们以及知道要导入什么和QtMultimediaKit 1.0

Web API和HTTP模块

如何结合angularjs模块?

为什么从模块导入功能会导入整个模块?

为什么输入模块会导出“子模块”?

为什么 webpack 认为我的模块不是模块?

为什么Sphinx自动模块不显示任何模块成员?