Express.js 在 MEAN 堆栈中做了啥?
Posted
技术标签:
【中文标题】Express.js 在 MEAN 堆栈中做了啥?【英文标题】:What does Express.js do in the MEAN stack?Express.js 在 MEAN 堆栈中做了什么? 【发布时间】:2013-10-25 00:33:16 【问题描述】:我最近接触了 AngularJS,我喜欢它。对于即将到来的项目,我希望使用 MEAN 堆栈(MongoDB、Express、Angular、Node)。我对 Angular 非常熟悉,并且对 MongoDB 和 Node 在堆栈中的用途有一定的了解。但是,我真的不明白 Express.js 的目的是什么。它对 MEAN 堆栈至关重要吗?在传统的 mysql、php、javascript 应用程序中,您会将它与什么进行比较?它有什么其他三个组件不能做的?
另外,如果有人想就堆栈的四个部分如何协同工作发表自己的看法,那也很棒。
【问题讨论】:
使使用 node.js 变得非常容易,创建路由等等。我建议阅读:evanhahn.com/understanding-express-js 更新了 Evan Hahn 链接:evanhahn.com/understanding-express-3 (v3) 和 evanhahn.com/understanding-express (v4) 【参考方案1】:Express 处理诸如 cookie、解析请求正文、形成响应和处理路由之类的事情。
它也是应用程序中侦听套接字以处理传入请求的部分。
来自express github的一个简单例子
var express = require('express'); var app = express(); app.get('/', function(req, res) res.send('Hello World'); ); app.listen(3000);显示快速服务器的创建,创建路由 app.get('/'...
并打开端口以侦听传入的 http 请求。
【讨论】:
【参考方案2】: MongoDB = 数据库 Express.js = 后端网络框架 Angular = 前端框架 Node = 后端平台/Web 框架基本上,Express 所做的是通过提供比普通 Node.js 更简单的接口来创建请求端点、处理 cookie 等,从而使您能够轻松创建 Web 应用程序。您可以将其排除在等式之外,但是您必须做更多的工作来构建您的 Web 应用程序。 Node 本身可以做所有 express 正在做的事情(express 是用 node 实现的),但是 express 只是将它包装在一个更好的包中。
我会将 Express 与您描述的堆栈中的一些 PHP Web 框架进行比较,例如 slim。
【讨论】:
对于 MS 堆栈,可以公平地说 Node IIS Web 托管服务器、Express.js ASP .Net 和 Angular Javascript/html 页面/MVC 视图和 MongoDB SQL 服务器。我有点困惑,因此询问。我可以从用 Nodejs 编写的代码建立数据库连接,就好像那样的话,那么 NodeJs 肯定不仅仅是一个像 IIS 这样的网络托管平台。在 MEAN 堆栈中,连接到 DB 以获取域模型信息。是 ExpressJS 还是 NodeJS?【参考方案3】:您可以将 Express 视为使用 Node.js 创建 Web 应用程序的实用工具带。它提供了构建 Web 服务器所需的几乎所有功能。如果您要使用 vanilla Node.js 编写相同的功能,您将不得不编写更多的代码。以下是 Express 的几个示例:
REST 路由变得简单,例如app.get('/user/:id', function(req, res) /* req.params('id') is avail */ );
一个中间件系统,允许您插入不同的同步函数,这些函数对请求或响应执行不同的操作,即。身份验证或添加属性
app.use(function(req,res,next) req.timestamp = new Date(); next(); );
用于解析 POST 请求正文的函数
跨站点脚本预防工具
自动 HTTP 标头处理
app.get('/', function(req,res) res.json(object: 'something'); );
一般来说,Sinatra 之于 Ruby 就像 Express 之于 Node.js。我知道这不是 PHP 示例,但我对 PHP 框架了解不多。
【讨论】:
【参考方案4】:与普通 js 相比,Express 允许您轻松管理 http 请求。 您需要执行以下操作才能提出获取请求
const Http = new XMLHttpRequest();
const url='https://jsonplaceholder.typicode.com/posts';
Http.open("GET", url);
Http.send();
Http.onreadystatechange=(e)=>
console.log(Http.responseText)
在 express 中,你需要 express 并使用它并发出 http 请求
const express = require("express")
const app =express();
app.get("url",callback function);
【讨论】:
【参考方案5】:在基于 Node.js 的框架中表达,简化了编写服务器端代码和逻辑。
添加了许多实用功能并提供了额外的功能,总的来说,使事情变得更容易。
Express 是基于中间件的 :它基本上通过一系列中间件(步骤)汇集传入的请求,我们可以对请求做一些事情,从中读取一些数据,对其进行操作,检查是否用户已通过身份验证或基本上立即发回响应。
这个中间件链让我们可以编写非常结构化的代码
【讨论】:
【参考方案6】:Express 是一个构建在 Http 模块之上的 nodejs 框架,具有更多可用和更好的功能,例如处理路由的简单方法。
例如:使用 HTTP
var http = require('http');
//create a server object:
http.createServer(function (req, res)
res.writeHead(200, 'Content-Type': 'text/html'); // http header
var url = req.url;
if(url ==='/about')
res.write('<h1>about us page<h1>'); //write a response
res.end(); //end the response
else if(url ==='/contact')
res.write('<h1>contact us page<h1>'); //write a response
res.end(); //end the response
else
res.write('<h1>Hello World!<h1>'); //write a response
res.end(); //end the response
).listen(3000, function()
console.log("server start at port 3000"); //the server object listens on port 3000
);
使用 Express:
var express = require('express');
var app = express();
app.get('/about',function(req,res)=>
res.write('<h1>about us page<h1>'); //write a response
res.end();
)
【讨论】:
以上是关于Express.js 在 MEAN 堆栈中做了啥?的主要内容,如果未能解决你的问题,请参考以下文章
nextState 在 shouldComponentUpdate 中做了啥?