Node.js Web框架之Express

转载 2015年11月17日 18:12:59




博客分类:

Express介绍

npm提供了大量的第三方模块,其中不乏许多Web框架,比如我们本章节要讲述的一个轻量级的Web框架 ——— Express。

Express是一个简洁、灵活的node.js Web应用开发框架, 它提供一系列强大的功能,比如:模板解析、静态文件服务、中间件、路由控制等等,并且还可以使用插件或整合其他模块来帮助你创建各种 Web和移动设备应用,是目前最流行的基于Node.js的Web开发框架,并且支持Ejs、jade等多种模板,可以快速地搭建一个具有完整功能的网站。

好,下面我们就开始吧!

1. NPM安装

npm install express

2. 获取、引用

var express = require('express');
var app = express();
 

通过变量“app”我们就可以调用express的各种方法了,好戏刚刚开始,继续加油吧!

创建应用

认识了Express框架,我们开始创建我们的第一个express应用。

在我们的默认项目主文件app.js添加如下内容:

var express = require('express');
var app = express();
app.get('/', function (request, response) {
  response.send('Hello World!');
});
 
app.listen(80);

说明:在后面课程学习中,我们会统一使用80端口用于监听请求。

添加完毕之后,通过右侧栏的“测试地址”来查看浏览器内容,当看到“Hello World!”内容就表明一个简单的express应用已经创建成功了。

get请求

前面我们实现了一个简单的express应用,下面我们就开始具体讲述它的具体实现,首先我们先来学习Express的常用方法。

get方法 —— 根据请求路径来处理客户端发出的GET请求。

格式:app.get(path,function(request, response));

path为请求的路径,第二个参数为处理请求的回调函数,有两个参数分别是request和response,代表请求信息和响应信息。

伦理片 http://www.dotdy.com/

如下示例:

var express = require('express');
var app = express();
 
app.get('/', function(request, response) {
  response.send('Welcome to the homepage!');
});
app.get('/about', function(request, response) {
  response.send('Welcome to the about page!');
});
app.get("*", function(request, response) {
  response.send("404 error!");
});
app.listen(80);

上面示例中,指定了about页面路径、根路径和所有路径的处理方法。并且在回调函数内部,使用HTTP回应的send方法,表示向浏览器发送一个字符串。

参照以上代码,试试自己设定一个get请求路径,然后浏览器访问该地址是否可以请求成功。

Middleware<中间件>

1.什么是中间件?

中间件(middleware)就是处理HTTP请求的函数,用来完成各种特定的任务,比如检查用户是否登录、分析数据、以及其他在需要最终将数据发送给用户之前完成的任务。 它最大的特点就是,一个中间件处理完,可以把相应数据再传递给下一个中间件。

2.一个不进行任何操作、只传递request对象的中间件,大概是这样:

function Middleware(request, response, next) {
  next();
}
 

上面代码的next为中间件的回调函数。如果它带有参数,则代表抛出一个错误,参数为错误文本。

function Middleware(request, response, next) {
  next('出错了!');
}

抛出错误以后,后面的中间件将不再执行,直到发现一个错误处理函数为止。如果没有调用next方法,后面注册的函数也是不会执行的。

all函数的基本用法

和get函数不同app.all()函数可以匹配所有的HTTP动词,也就是说它可以过滤所有路径的请求,如果使用all函数定义中间件,那么就相当于所有请求都必须先通过此该中间件。

格式:app.all(path,function(request, response));

如下所示,我们使用all函数在请求之前设置响应头属性。

var express = require("express");
var app = express();
 
app.all("*", function(request, response, next) {
  response.writeHead(200, { "Content-Type": "text/html;charset=utf-8" }); //设置响应头属性值
next();
});
 
app.get("/", function(request, response) {
  response.end("欢迎来到首页!");
});
 
app.get("/about", function(request, response) {
  response.end("欢迎来到about页面!");
});
 
app.get("*", function(request, response) {
  response.end("404 - 未找到!");
});
 
app.listen(80);

上面代码参数中的“*”表示对所有路径有效,这个方法在给特定前缀路径或者任意路径上处理时会特别有用,不管我们请求任何路径都会事先经过all函数。

如果所示,如果我们跳过all函数又会怎么样呢,自己动手试一试?

use基本用法1

use是express调用中间件的方法,它返回一个函数。

格式:app.use([path], function(request, response, next){});

//可选参数path默认为"/"。

1. 使用中间件

app.use(express.static(path.join(__dirname, '/')));

如上呢,我们就使用use函数调用express中间件设定了静态文件目录的访问路径(这里假设为根路径)。

2. 如何连续调用两个中间件呢,如下示例:

var express = require('express');
var app = express();
 
app.use(function(request, response, next){
    console.log("method:"+request.method+" ==== "+"url:"+request.url);
    next();
});
 
app.use(function(request, response){
    response.writeHead(200, { "Content-Type": "text/html;charset=utf-8" });
    response.end('示例:连续调用两个中间件');
});
 
app.listen(80);

回调函数的next参数,表示接受其他中间件的调用,函数体中的next(),表示将请求数据传递给下一个中间件。

上面代码先调用第一个中间件,在控制台输出一行信息,然后通过next(),调用第二个中间件,输出HTTP回应。由于第二个中间件没有调用next方法,所以req对象就不再向后传递了。

use基本用法2

use方法不仅可以调用中间件,还可以根据请求的网址,返回不同的网页内容,如下示例:

var express = require("express");
var app = express();
 
app.use(function(request, response, next) {
  if(request.url == "/") {
    response.send("Welcome to the homepage!");
  }else {
    next();
  }
});
 
app.use(function(request, response, next) {
  if(request.url == "/about") {
    response.send("Welcome to the about page!");
  }else {
    next();
  }
});
app.use(function(request, response) {
  response.send("404 error!");
});
app.listen(80);

上面代码通过request.url属性,判断请求的网址,从而返回不同的内容。

回调函数

Express回调函数有两个参数,分别是request(简称req)和response(简称res),request代表客户端发来的HTTP请求,request代表发向客户端的HTTP回应,这两个参数都是对象。示例如下:

function(req, res) {
});

在后面的学习中,我们会经常和它打交道,牢牢记住它的格式吧!

获取主机名、路径名

今天我们就先来学习如何使用req对象来处理客户端发来的HTTP请求。

  1. req.host返回请求头里取的主机名(不包含端口号)。

  2. req.path返回请求的URL的路径名。

如下示例:

var express = require('express');
var app = express();
 
app.get("*", function(req, res) {
  console.log(req.path);
  res.send("req.host获取主机名,req.path获取请求路径名!");
});
 
app.listen(80);

试一试在浏览器中输入任意一个请求路径,通过req查看主机名或请求路径。

影音先锋电影 http://www.iskdy.com/

query基本用法

query是一个可获取客户端get请求路径参数的对象属性,包含着被解析过的请求参数对象,默认为{}。

var express = require('express');
var app = express();
 
app.get("*", function(req, res) {
  console.log(req.query.参数名);
  res.send("测试query属性!");
});
 
app.listen(80);

通过req.query获取get请求路径的对象参数值。

格式:req.query.参数名;请求路径如下示例:

例1: /search?n=Lenka

req.query.n // "Lenka"

例2: /shoes?order=desc&shoe[color]=blue&shoe[type]=converse

req.query.order // "desc"

req.query.shoe.color // "blue"

req.query.shoe.type // "converse"

试一试get请求一个带参数路径,使用“req.query.参数名”方法获取请求参数值。

 

更多内容、示例和在线练习可以去这里看看:

使用node.js ,Express, 和Mongodb 简历一个简单的Restful 网页服务-part1

使用node.js ,Express, 和Mongodb 简历一个简单的Restful 网页服务-part1 这个实现的基础是《使用handlebars 代替Jade 使用Express》 ,或者...
  • susan200893171
  • susan200893171
  • 2015年06月26日 12:57
  • 946

Node.js开发入门—Express安装与使用

express安装,重写HelloWorld和HTTP文件服务器,了解express与http模块的不同
  • foruok
  • foruok
  • 2015年08月07日 07:18
  • 17416

nodejs开发——express配置自签名https服务器

在nodejs中使用express来搭建框架可以说是非常的简单方便,但是一般默认创建的都是http服务器,也就是只能通过http协议进行访问。如今https已经是发展趋势,我们应该顺应时代的潮流。在本...
  • CHENYUFENG1991
  • CHENYUFENG1991
  • 2017年03月04日 20:41
  • 5093

mac下配置NODEJS 开发环境及 安装 express 4.10

最近项目结项没捣鼓NODEJS
  • baodongsheng2011
  • baodongsheng2011
  • 2014年10月31日 01:37
  • 23164

从helloworld开始构建一个node.js+socket.io+express4实时应用示例

查看一下node.js和npm(模块管理)版本号node -v v0.12.0 npm -v 2.5.1 先运行个小例子进入示例根目录,如/data/www/hello 新建helloworld.j...
  • keyunq
  • keyunq
  • 2015年03月26日 13:56
  • 15777

node使用express搭建简单web框架并实现文件上传

node使用express搭建简单web框架并实现文件上传,node入门,express入门
  • CFrieman
  • CFrieman
  • 2017年06月08日 00:22
  • 2236

Nodejs的Express框架简单使用

一、什么是ExpressExpress就是一个为nodejs设计的web开发框架,它基于nodejs平台,本身功能极简,灵活,它提供了一系列强大的特性来帮助创建各种web和移动设备应用 。 特点: ...
  • Sophie_U
  • Sophie_U
  • 2016年11月02日 00:08
  • 3597

《node.js实战》案例—基于Express4.x框架的图片上传及下载的web应用

node.js基于Express4.x框架的图片上传及下载的web应用     最近看了《node.js实战》一书,结合书中图片分享程序开发过程,了解基于Express框架的web应用程序开发的步骤...
  • hw_2013
  • hw_2013
  • 2014年12月24日 15:38
  • 1685

WINDOWS系统下NODEJS、NPM、EXPRESS的下载和安装教程

1、 node.js下载 首先进入http://nodejs.org/dist/,这里面的版本呢,几乎每个月都出几个新的,建议大家下载最新版本,看看自己的电脑是多少位的,别下错了。 下载完...
  • goto1997
  • goto1997
  • 2017年03月08日 23:46
  • 528

nodejs之express 从零开始

1,怎么在express中返回静态页面 我的目录结构是: 这样,在public中的文件是不需要添加路由的, 也就是说不用在app.get('name',...)中指定的,如果要访问postFile ...
  • loudyten
  • loudyten
  • 2014年03月31日 18:15
  • 32254
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Node.js Web框架之Express
举报原因:
原因补充:

(最多只允许输入30个字)