ChatGPT解决这个技术问题 Extra ChatGPT

什么是 Express.js? [关闭]

关闭。这个问题是基于意见的。它目前不接受答案。想改进这个问题?更新问题,以便可以通过编辑这篇文章用事实和引用来回答它。 2个月前关闭。社区在 2 个月前审查了是否重新打开此问题并将其关闭:需要更多关注更新问题,使其仅通过编辑此帖子来关注一个问题。改进这个问题

我是 Node.js 的学习者。

什么是 Express.js? Node.js 的目的是什么?为什么我们实际上需要 Express.js?使用 Node.js 对我们有什么用处?什么是 Redis? Express.js 附带它吗?

向下滚动到社区 wiki 答案(有 +50 赏金)。我发现这比标记的答案更有帮助。

1
10 revs, 7 users 71%

1) 什么是 Express.js?

Express.js 是一个 Node.js 框架。它是目前最流行的框架(NPM 上最受关注的)。

https://i.stack.imgur.com/eRw5a.png

它是围绕 Connect 中间件的配置和精细的简单性构建的。有些人将 Express.js 与 Ruby Sinatra 与笨重且固执己见的 Ruby on Rails 进行比较。

2) Node.js 的目的是什么?

您不必一遍又一遍地重复相同的代码。 Node.js 是一种具有 HTTP 模块的低级 I/O 机制。如果您只使用 HTTP 模块,那么很多工作,例如解析负载、cookie、存储会话(在内存中或在 Redis 中)、基于 regular expressions 选择正确的路由模式将要重新实施。有了 Express.js,它就在那里供您使用。

3) 为什么我们实际上需要 Express.js?使用 Node.js 对我们有什么用处?

第一个答案应该回答你的问题。如果不是,则尝试用普通的 Node.js(即仅使用核心模块)然后在 Express.js 中编写一个小型 REST API 服务器。后者将使您的时间和代码行数减少 5-10 倍。

什么是 Redis? Express.js 附带它吗?

Redis 是一种快速持久的键值对存储。您可以选择使用它来存储 Express.js 的会话,但您不需要这样做。默认情况下,Express.js 具有用于会话的内存存储。 Redis 也可用于排队作业,例如电子邮件作业。

查看my tutorial on REST API server with Express.js

MVC 但不是单独的

Express.js 本身不是一个模型-视图-控制器框架。您需要将自己的对象关系映射库(例如用于 MongoDB 的 Mongoose、用于 SQL 数据库的 Sequelize (http://sequelizejs.com)、用于许多数据库的 Waterline (https://github.com/balderdashy/waterline))引入堆栈。

备择方案

要考虑的其他 Node.js 框架(https://www.quora.com/Node-js/Which-Node-js-framework-is-best-for-building-a-RESTful-API):

更新:我整理了帮助人们选择 Node.js 框架的资源:http://nodeframework.com

更新 2:我们向 nodeframework.com 添加了一些 GitHub 统计信息,因此现在您可以在一页上比较 30 多个框架的社交证明级别(GitHub 星级)。

https://i.stack.imgur.com/1yIPs.png

全栈:

http://sailsjs.org

http://derbyjs.com/

只是 REST API:

http://mcavage.github.io/node-restify/

Ruby on Rails 像:

http://railwayjs.com/

http://geddyjs.org/

西纳特拉喜欢:

http://expressjs.com/

其他:

http://flatironjs.org/

https://github.com/isaacs/npm-www

http://frisbyjs.com/

中间件:

http://www.senchalabs.org/connect/

静态站点生成器:

http://docpad.org

https://github.com/jnordberg/wintersmith

http://blacksmith.jit.su/

https://github.com/felixge/node-romulus

https://github.com/caolan/petrify


这么说是否正确 - Express.js 是一个 Node.js 模块(您已在第一行中将其作为框架处理)。我经常听到术语 nodeJs module。框架内的框架对我来说有点新闻。
是的,在实践中,Express 是一个节点包管理器 (npm) 模块(又名包),就像它添加到应用程序中一样多,就像 npm 中的其他模块一样。 (如果您查看 Node Express 应用程序的源文件夹,您会看到一个名为 node_modules 的文件夹。这将包含一个名为 express 的子文件夹。)但它比 npm 之外的大多数其他模块更有用,因为它有一个加载依赖模块,有效地为应用程序编码器提供用于常见任务的 API。框架内的框架?更像是可附加到服务器创建框架的实现框架。
我觉得你根本没有解释它的作用,你应该简要解释一下 web 是如何工作的,开发人员过去是如何工作的以及它是如何发展的,这样任何人都会清楚地看到为了改进而表达了什么
@RBT您是否通过“框架内的框架”一词将nodejs称为外部框架?另外,我一直认为 express 是一个库而不是框架。
T
Tom Meeson

这过于简化了,但 Express.js 之于 Node.js 就像 Ruby on RailsSinatra 之于 Ruby

Express 3.x 是一个轻量级的 Web 应用程序框架,可帮助您将 Web 应用程序组织成服务器端的 MVC 架构。您可以为您的模板语言使用多种选择(例如 EJSJadeDust.js)。

然后,您可以使用像 MongoDB 这样的数据库和 Mongoose(用于建模)为您的 Node.js 应用程序提供后端。 Express.js 基本上可以帮助您管理一切,从路由到处理请求和视图。

Redis 是一个键/值存储——通常用于 Node.js 应用程序中的会话和缓存。你可以用它做更多的事情,但这就是我使用它的目的。我将 MongoDB 用于更复杂的关系,例如 line-item <->订购 <->用户关系。有些模块(尤其是 connect-redis)可以与 Express.js 一起使用。您需要在服务器上安装 Redis 数据库。

这是 Express 3.x 指南的链接:https://expressjs.com/en/3x/api.html


Express 更像是 sinatra 而不是 rails。
Express 的灵感来自于 sinatra。可能它最重要的特性是路由。它还使 connect 提供的所有中间件都可用(以至于除了需要 connect 中间件的最专业的应用程序之外的所有应用程序都可能使用 express)。
我会说 redis 实际上是复杂关系的理想选择。
EJS 链接目前已失效。
我真的不明白 MVC 与 Express 的关系。如果我没记错的话,Express 没有模型也没有视图。它是一个基于中间件的框架,而不是 MVC 框架。请解释一下。
C
Community

什么是 Express.js?

Express.js 是一个 Node.js Web 应用程序服务器框架,专为构建单页、多页和混合 Web 应用程序而设计。它是 node.js 的事实上的标准服务器框架。

基于 Express 构建的框架。

几个流行的 Node.js 框架是基于 Express 构建的:

LoopBack:高度可扩展的开源 Node.js 框架,用于快速创建动态的端到端 REST API。 Sails:用于 Node.js 的 MVC 框架,用于构建实用的生产就绪应用程序。 Kraken:安全且可扩展的层,通过提供结构和约定来扩展 Express。 MEAN:自以为是的全栈 JavaScript 框架,可简化和加速 Web 应用程序开发。

Node.js 的目的是什么?为什么我们实际上需要 Express.js?使用 Node.js 对我们有什么用处?

Express 添加了非常简单的路由和对 Connect 中间件的支持,允许许多扩展和有用的功能。

例如,

想要会议?在那里

想要 POST 正文/查询字符串解析?在那里

想要通过玉、小胡子、ejs 等轻松模板?在那里

想要优雅的错误处理,不会导致整个服务器崩溃?


m
mzdv

Express.js 是 Node.js 的模块化 Web 框架。它用于更轻松地创建 Web 应用程序和服务 Express.js 简化了开发,使编写安全、模块化和快速的应用程序变得更加容易。您可以在普通的旧 Node.js 中完成所有这些操作,但可能(并且将会)出现一些错误,包括安全问题(例如,未正确转义字符串) Redis 是一种内存数据库系统,以其快速性能而闻名。不,但您可以使用 Redis 客户端将它与 Express.js 一起使用

我不能比这更简洁了。对于您的所有其他需求和信息,Google 是您的朋友。


R
Rishabh.IO

ExpressJS 是 NodeJS 之上的基本 Web 应用程序框架。

它可用于快速构建 WebApp、RESTFUL API 等。

支持多种模板引擎,如 Jade、EJS。

ExpressJS 仅保留极简功能作为核心功能,因此默认不支持 ORM 或 DB。但只要稍加努力,expressjs 应用程序就可以与不同的数据库集成。

有关创建 ExpressJS 应用程序的入门指南,请查看以下链接:

ExpressJS Introductory Tutorial


D
Dale K

Express 是 Node 的一个模块框架,您可以将其用于基于服务器的应用程序,这些应用程序将“侦听”来自客户端的任何输入/连接请求。当您在 Node 中使用它时,它只是说您正在请求使用 Node 模块中的内置 Express 文件。

Express 是许多以 NodeJS 为后端的 Web 应用程序的“骨干”。据我所知,它的主要资产是处理两个主机之间“交互”服务的路由系统的天意。它有很多替代品,例如 Sails。


F
Frostiy

Express.js 是用于 Node 的框架,它最常用作 Node js 的 Web 应用程序。

以下是有关如何使用 express https://www.youtube.com/watch?v=QEcuSSnqvck 快速设置节点应用程序的视频链接


绝对初学者的真棒解释!
R
Rashi Goyal

Express.js 由 TJ Holowaychuk 创建,现在由社区管理。它是 node.js 中最流行的框架之一。 Express 还可用于开发各种产品,例如 Web 应用程序或 RESTful API。更多信息请阅读 expressjs.com 官方网站。


佚名

ExpressJS 是一个 Web 应用程序框架,它为您提供一个简单的 API 来构建网站、Web 应用程序和后端。使用 ExpressJS,您无需担心低级协议、流程等。用于 Node.js 的快速、无主见、极简主义的 Web 框架

Pug(以前称为 Jade)是一种用于编写 HTML 模板的简洁语言。它 -

生成 HTML 支持动态代码 支持可重用性 (DRY) 它是 Express 中最流行的模板语言之一。


B
Balsa Popovic

它的力量的一个完美的例子


router.route('/recordScore').post(async(req, res) => {   



  
  let gold_nation = req.body.gold && req.body.gold.nationality;
  let silver_nation = req.body.silver && req.body.silver.nationality;
  let bronze_nation = req.body.bronze && req.body.bronze.nationality;
  let competition_id = req.body.competition_id;

  console.log(gold_nation)
  console.log(silver_nation)
  req.body.gold && await country.updateOne({"flag" : gold_nation}, { $inc: { gold: 1 } });
  
  req.body.silver && await country.updateOne({"flag" : silver_nation}, { $inc: { silver: 1 } });
 
  req.body.bronze && await country.updateOne({"flag" : bronze_nation}, { $inc: { bronze: 1 } });
  console.log(competition_id)
  //await competition.updateOne({"_id" : competition_id}, {$set: {recorded : true}});
//!! Uncomment this and change model/competition.ts set recorer to recorded
// this is commented out so you can test adding medals for every case and not creating competitions every time
  res.status(200).json("Success");

});



  async record(){
    let index = this.competitions.findIndex(e => e._id == this.selectedCompetition);
    let goldIndex = this.competitors.findIndex(e => e._id == this.goldWinner);
    let silverIndex = this.competitors.findIndex(e => e._id == this.silverWinner);
    let bronzeIndex = this.competitors.findIndex(e => e._id == this.bronzeWinner);

    console.log(this.competitors[goldIndex]);
    console.log(this.competitors[1-goldIndex]);

    this.sportService.recordCompetition(this.competitors[goldIndex], 
                                    this.competitors[1-goldIndex],
                                    null,
                                    this.competitions[index]).subscribe((m:string) => this.reset(m))



    }

    reset(message: string){
      this.statusMessage = message;
        if(message == "Success"){
          
          this.competitions = this.competitions.filter( (c) => c._id != this.selectedCompetition);
          this.goldWinner = '';
          this.silverWinner = '';
          this.bronzeWinner = '';
        }
  
  
        setTimeout(()=>{                          
          this.statusMessage = '';
        }, 3000);
    
    }


router.route('/registerCompetitor').post(async(req, res) => {   


  //! PROVJERI DA LI JE FORMIRANJE TAKMICENJA ZAVRSENO

  let competitors = req.body.map( c => ({
    name: c.name,
    gender: c.gender,
    nationality: c.nationality,
    sport: c.sport,
    disciplines: c.disciplines
  }));
  console.log(competitors)
  await country.updateOne({"flag" : competitors[0].nationality}, { $inc: { numberOfCompetitors: competitors.length } });


  await   competitor.collection
                                    .insertMany(competitors)
                                    .then( u => {
                                      res.status(200).json("Ok")
                                    })
                                    .catch(err =>{ res.status(400).json("notOk");
                                  });
  
  
});



您的答案可以通过额外的支持信息得到改进。请edit添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。您可以找到有关如何写出好答案的更多信息in the help center