58

我最近接触了 AngularJS,我喜欢它。对于即将到来的项目,我希望使用 MEAN 堆栈(MongoDB、Express、Angular、Node)。我对 Angular 非常熟悉,并且对 MongoDB 和 Node 在堆栈中的用途有一定的了解。但是,我真的不明白 Express.js 的目的是什么。它对 MEAN 堆栈至关重要吗?在传统的 MySQL、PHP、javascript 应用程序中,您会将它与什么进行比较?它有什么其他三个组件无法做到的?

此外,如果有人想就堆栈的四个部分如何协同工作给出自己的看法,那就太好了。

4

6 回答 6

70
  • MongoDB = 数据库
  • Express.js = 后端网络框架
  • Angular = 前端框架
  • Node = 后端平台/web 框架

基本上,Express 所做的是它通过提供比普通 Node.js 更简单的接口来创建请求端点、处理 cookie 等,使您能够轻松创建 Web 应用程序。您可以将其排除在等式之外,但是您必须做更多的工作来构建您的 Web 应用程序。Node 本身可以做所有 express 正在做的事情(express 是用 node 实现的),但是 express 只是将它包装在一个更好的包中。

我会将 Express 与您描述的堆栈中的一些 PHP Web 框架进行比较,例如slim

于 2013-10-16T18:41:28.677 回答
20

您可以将 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 框架了解不多。

于 2013-10-16T18:59:09.563 回答
5

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 请求。

于 2013-10-16T18:41:06.957 回答
1

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
});

使用快递:

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();
})
于 2019-04-13T11:27:42.660 回答
1

在基于 Node.js 的框架中表达,简化了服务器端代码和逻辑的编写。

添加了许多实用程序功能并提供了附加功能,并且通常使事情变得更容易。

Express 是基于中间件的:它基本上通过一系列中间件(步骤)汇集传入的请求,我们可以对请求执行某些操作,从中读取一些数据,对其进行操作,检查用户是否经过身份验证或基本上发回响应立即地。

这个中间件链允许我们编写非常结构化的代码

于 2018-12-09T17:08:02.770 回答
0

与 vanilla 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);
于 2018-09-30T11:10:54.847 回答