在Node.js中实现Express

Express提供了一个轻量级模块,把Node.js的http模块功能封装在一个简单易用的接口中。Express也扩展了http模块的功能,使你轻松处理服务器的路由,响应,cookie和HTTP请求的状态。本篇文章章介绍如何在Node.js应用程序中实现Express充当Web服务器。你将学习如何配置Express服务器,设计路由,并利用Request和Response对象发送和接收HTTP请求。你也将了解如何在Express中实现模板引擎。

1,Express入门

在Node.js的项目中开始使用Express是非常简单的。所有你需要做的就是添加express模块,在项目的根目录下使用下面的命令来完成:
npm install express
你还可以添加express到你的package.json模块,以确保当你部署应用程序时,express已安装。

一旦你安装了express模块,就需要为你的Node.js应用程序创建一个express类的实例作为HTTP服务器。下面的代码行导入express模块,并创建你可以使用的express实例:
var express = require('express');
var app = express();
1.1,配置Express设置
Express提供了控制Express服务器的行为的一些应用程序设置。这些设置定义了环境以及Express如何处理JSON解析,路由和视图。下表列出了可以在Express对象中定义的设置。

Express应用程序的设置

设置 说明
env 定义环境模式字符串,如development(开发),testing(测试)和production(生产)。默认值是process.env.NODE_ENV
trust proxy 启用/禁用反向代理的支持。默认设置为disabled(禁用)
jsonp callback name 定义JSON请求的默认回调名称。默认值是?callback=
json replacer 定义JSONreplacer回调函数。默认为null
json spaces 指定当格式化JSON响应时使用的空格数量。默认值在开发中是2,在生产中是0
case sensitive routing 启用/禁用区分大小写。例如, /home与/Home是不一样的,默认为disabled
strict routing 启用/禁用 严格的路由。例如,/home与/home/是不一样的。默认设置为disabled
view cache 启用/禁用视图模板编译缓存,这保留编译模板的缓存版本。默认设置为enabled(启用)
view engine 指定呈现模板时,如果从视图中省略了文件扩展名,应该使用的默认模板引擎扩展
views 指定模板引擎用来查找视图模板的路径。默认值是./views
express对象提供set(setting,value),enable(setting)和disable(setting)方法来为应用程序的设置来设定值。例如,下面代码启用信任代理设置,并设置视图引擎(view engine)为jade:

app.enable(‘trust proxy’);
app.disable(‘strict routing’);
app.set(‘view engine’,‘jade’);
为了得到一个设定的值,使用get(setting),enable(setting)和disabled(setting)方法。例如:

app.enabled(‘trust proxy’); \true
app.disabled(‘strict routing’); \true
app.get(‘view engine’); \jade

1.2,启动Express服务器
为了把Express实现为Node.js应用程序的服务器,你需要创建一个实例,并开始监听一个端口。下面的3行代码就启动了一个非常基本的监听端口8080的Express服务器:

var express = require(‘express’);
var app = express();
app.listen(8080);
该app.listen(port)调用把底层的HTTP连接到port(端口)上,并开始监听它。底层的HTTP连接使用的是利用在http库中创建的Server对象上的listen()方法产生的相同连接。

事实上,express()返回的值实际上是一个回调函数,它映射了传递到http.createServer()和https.createServer()方法的回调函数。

下面的代码清单显示了如何使用Node.js实现一个基本的HTTP和HTTPs服务器。
var express = require('express');
var https = require('https');
var http = require('http');
var fs = require('fs');
var app = express();
var options = {
    
    
	host:'127.0.0.1',
	key:fs.readFileSync('ssl/server.key'),
	cert:fs.readFileSync('ssl/server.crt')
};
http.createServer(app).listen(80);
https.createServer(options,app).listen(443);
app.get('/',function(req,res){
    
    
	res.send('Hello from Express');
});

2,配置路由

前面讲了如何启动Express HTTP服务器。然而,在服务器可以开始接受请求前,你需要先定义路由。路由(route)是一个简单的定义,它描述如何处理针对Express服务器的HTTP请求的URL路径部分。

2.1 实现路由
你可以把路由定义为两部分。第一部分是HTTP请求方法(通常是GET或POST)。路由定义的第二部分是在URL中指定的路径,例如,/用于一个网站的根目录,/login用于登录页面,而/cart用于显示购物车。这些方法常常需要进行完全不同的处理。

express模块提供了一系列的函数,可让你在Express服务器中实现路由。这些函数都使用以下语法:
app.<method>{
    
    path,[callback...],callback}
语法的<method>部分指的是HTTP请求方法,如GET或POST。例如:
app.get(path,[middleware,...],callback)
app.post(path,[middleware,...],callback)
path指的是要通过回调函数来处理的URL的路径部分。middleware参数是回调函数执行前要应用的中间件函数。callback参数是应该处理该请求并把响应发回客户端的请求处理程序。callback参数应该接受Request对象作为第一个参数并接收Response对象作为第二个参数。

例如,下面的示例实现了一些基本的GET和POST路由:
var express = require('express');
var http = require('http');
var app = express();
http.createServer(app).listen(80);
app.get('/',function(req,res){
    
    
	res.send("Server root");
});
app.get('/login',function(req,res){
    
    
	res.send("login page");
});
app.post('/save',function(req,res){
    
    
	res.send("Save page");
});
当Express服务器接收到一个HTTP请求时,它会查找已经为适当的HTTP方法和路径的定义的路由。如果找到一个,那么Request和Response对象被创建来管理请求,并被传递给路由的回调函数。

Express还提供了app.all()方法,它的工作效果与app.get()和app.post()方法完全一样。唯一的区别在于,回调函数app.all()调用用于指定路径的每个请求,而不管是否是HTTP方法。此外,app.all()方法可以接受*字符作为路径的通配符。这对于实现记录请求日志或其他特殊的功能来处理请求是一个很棒的特性。例如:
app.all('*',function(req,res){
    
    
	//全部路径的全局处理程序
});
app.all('/user/*',function(req,res){
    
    
	// /user路径的全局处理程序
})

猜你喜欢

转载自blog.csdn.net/qq_26642611/article/details/108711736