【问题标题】:Why combine http module with express module为什么要结合 http 模块和 express 模块
【发布时间】:2016-07-14 08:51:57
【问题描述】:

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

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

【问题讨论】:

  • @jfriend00 抱歉错字已修正和更新。谢谢。
  • @jfriend00 这就是我的想法,但我看到了它们结合的例子

标签: node.js


【解决方案1】:

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

确实没有理由使用http 模块创建自己的http 服务器。 Express 将使用 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 作为该服务器的侦听器时,确实没有区别(除了少一点打字)。


所以,这两个代码sn-ps在功能上是相同的:

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

【讨论】:

  • 所以更适合定制
  • @user3497437 - 我在答案中添加了更多内容,向您展示了两个功能相同的示例。如果您需要在创建服务器时传递自定义选项,通常只需要使用http.createServer()
  • @jfrend00 我认为你的意思是“res.send”而不是“req.send”。
  • @user3497437 - 是的,我修好了。
猜你喜欢
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
相关资源
最近更新 更多