Node.js之Express一

简介:

前面也了解了HTTP模块,但它并不支持session、cookie等。Express是对HTTP模块的封装,同时也支持session这些,使用起来也更好用。Express更有点像IIS服务器。它也是属于一个模块的内容,所以当然是要先添加Express模块 npm install express.然后就是创建对象和使用。


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

一、Express设置

Express提供了控制Express服务器的行为的一些应用程序设置。这些设置定义了环境以及Express如何处理JSON解析、路由和视图。express对象提供set(setting,value)、enable(setting)、disable(setting)方法为应用程序的设置来设定值。既然可以设置那就可以获取。Express使用get(setting)、enable(setting)、disable(setting)来获取设定的值。

下面是它的一些设置:

env:定义环境模式字符串,如development(开发)、testing(测试)和production(生产).默认process.env.NODE_ENV

trust_proxy:启用/禁止方向代理的支持。默认disabled(禁用).

jsonp callback name:定义jsonp请求的默认回调名称,默认?callback=

jsonp replacer:定义json replacer回调函数。默认null。

case sensitive routing:启用/禁用区分大小写。默认disabled。

strict routing:启用/禁用严格的路由。例如/home和/home/是不一样的。默认disabled.

view cache:启用/禁用视图模板编译缓存,这保留编译模板的缓存版本。默认disabled.

view engine:指定呈现模板时,如果从视图中省略了文件扩展名,应该使用的默认模板引擎扩展

views:指定模板引擎用来查找视图模板的路径.默认./views.

二、启动Express服务器

使用app.listen(port)调用把底层的HTTP连接绑定到port(端口)上,并开始监听它。顶层的http连接使用的是利用http库中创建的server对象上的listen()方法产生相同连接。其实express()返回的值实际是一个回调函数,它映射了传递到http.createServer()和https.createServer()方法的回调函数。


var express=require('express');
var http=require('http');
var app=express();
http.createServer(app).listen(8080);
app.get('/',function(req,res){
    res.send('Hello  World');
})

"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe Express_http.js
module.js:327
    throw err;
    ^

Error: Cannot find module 'express'
    at Function.Module._resolveFilename (module.js:325:15)
    at Function.Module._load (module.js:276:25)
    at Module.require (module.js:353:17)
    at require (internal/module.js:12:17)
    at Object.<anonymous> (f:\NodeJsDemo\Express_http.js:12:14)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Function.Module.runMain (module.js:441:10)

Process finished with exit code 1

如果出现上面的错误表示找不到模块Express,可以在该源码文件夹执行npm install express来解决

三、路由

1.实现路由

路由就是根据http请求的虚拟路径找到服务器对应的物理路径。在.Net的MVC中也有路由表,其实和它差不多.

express模块提供了函数来实现。app.<method>(path,[meddleware,..],callback)

method:get、post等请求方法

meddleware:回调函数要执行前要应用的中间件函数

express还提供了一个方法app.all().回调函数app.all()调用用于指定路径的每个请求,不止是HTTP方法。app.all()可以接受*字符作为路径的通配符,这对于实现记录请求日志或其他特殊的功能来处理请求是一不错的方法。

2.在路由中应用参数

应用参数意味着变化,不是死的一成不变的。.Net自定义路由也是,可以regist路由。

express中主要有4种方法:

1.查询字符串

这种是最基础的最常见的.通过url路径后面加?key=value&key1=value1来实现。

2.post参数

这个会用到中间件body-parser。所以先跳过。

3.正则表达式app.get(正则,function(req,res){})

例如:app.get(/^\/book\/(\w+)\:(\W+)?$/,callback),可以通过req.param[index]获取url路径对应的参数

4.使用已定义的参数来应用路由参数

app.get('/user/:userId',callback)。这时可以通过req.param(参数名)来获取参数

为已定义的参数应用回调函数:

使用已定义的参数有一个好处,如果定义的参数在URL中,可以指定被执行的回调函数。当解析url时,如果express发现某个参数有注册的回调函数,它就在调用路由处理程序之前调用参数的回调函数,可以为一个路由注册多个回调函数。

用app.param(param,function(req,res,next,value){})来实现为已定义的参数应用回调函数。

param:定义的参数名

nest:用于已注册的下一个app.param()回调的回调函数。必须在回调函数中调用next(),否则回调链将被破坏。

value:从url路径解析的参数的值。

demo代码:


var express = require('express');
var url = require('url');
var app = express();
app.listen(8080);
app.get('/', function (req, res) {
  res.send("Get Index");
});
app.get('/find', function(req, res){
  var url_parts = url.parse(req.url, true);
  var query = url_parts.query; 
  var response = 'Finding Book: Author: ' + query.author + 
                  ' Title: ' + query.title;
  console.log('\nQuery URL: ' + req.originalUrl);  
  console.log(response);
  res.send(response);
});
app.get(/^\/book\/(\w+)\:(\w+)?$/, function(req, res){
  var response = 'Get Book: Chapter: ' + req.params[0] + 
              ' Page: ' + req.params[1];
  console.log('\nRegex URL: ' + req.originalUrl);
  console.log(response);
  res.send(response);
});
app.get('/user/:userid', function (req, res) {
  var response = 'Get User: ' + req.param('userid');
  console.log('\nParam URL: ' + req.originalUrl);
  console.log(response);
  res.send(response);
});
app.param('userid', function(req, res, next, value){
  console.log("\nRequest received with userid: " + value);
  next();
});

//    /find?author=Brad&title=Node
//    /book/12:15
//    /user/4983

在浏览器中以此输入http://127.0.0.1:8080/find、/find?author=Brad&title=Node、/book/12:15 、/user/4983会有一下输出


"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe express_routes.js

Query URL: /find
Finding Book: Author: undefined Title: undefined

Query URL: /find?author=Brad&title=Node
Finding Book: Author: Brad Title: Node

Regex URL: /book/12:15
Get Book: Chapter: 12 Page: 15

Request received with userid: 4983

Param URL: /user/4983
Get User: 4983

上面使用自定义的参数中只有一个参数,现在弄一个两个参数的来看一下效果,并为这两个参数都应用了回调函数。


var express = require('express');
var url = require('url');
var app = express();
app.listen(8080);

app.get('/user/:userid/pwd/:pwd', function (req, res) {
  var response = 'Get User: ' + req.param('userid');
  console.log('\nParam URL: ' + req.originalUrl);
  console.log(response);
  res.send(response);
});
app.param('userid', function(req, res, next, value){
  console.log("\nRequest received with userid: " + value);
  next();
});
app.param('pwd', function(req, res, next, value){
  console.log("\nRequest received with pwd: " + value);
  next();
});

"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe express_routes.js

Request received with userid: 4983

Request received with pwd: 123456

Param URL: /user/4983/pwd/123456
Get User: 4983

相关文章
|
19天前
|
开发框架 监控 JavaScript
使用Node.js 框架( Express.js)来创建一个简单的 API 端点
【7月更文挑战第5天】使用Node.js 框架( Express.js)来创建一个简单的 API 端点
18 3
|
29天前
|
JSON JavaScript 中间件
Express.js:构建轻量级Node.js应用的基石
**Express.js 概览**:作为Node.js首选Web框架,Express以其轻量、灵活和强大的特性深受喜爱。自2009年以来,其简洁设计和丰富中间件支持引领开发者构建定制化应用。快速开始:使用`express-generator`创建项目,安装依赖,启动应用。示例展示如何添加返回JSON消息的GET路由。Express适用于RESTful API、实时应用等多种场景,社区支持广泛,助力高效开发。
28 1
|
1月前
|
JavaScript 前端开发 中间件
Express框架搭建项目 node.js
【6月更文挑战第3天】这篇文章是关于使用Express框架构建Node.js Web应用的教程。Express是一个轻量级、功能丰富的框架,特点包括简洁灵活的核心、强大的中间件支持、灵活的路由系统和模板引擎兼容性。文章介绍了如何安装Express,并通过一个简单的示例展示了如何创建一个基本的Web服务器。最后,鼓励读者继续学习和实践,以充分利用Express和Node.js的能力。
52 1
|
1月前
|
SQL JavaScript 前端开发
简单用Nodejs + express 编写接口
【6月更文挑战第3天】该文介绍了如何在Node.js和Express中创建GET和POST接口。首先,简要提到了准备工作,建议查阅上一篇文章。接着展示了GET接口的示例,说明可以直接在浏览器中请求。然后,详细解释了POST接口的步骤,包括引入Express模块、设置路由处理程序、解析请求体及处理请求。最后,强调了编写接口时应注意错误处理、安全性、中间件使用、路由组织、日志记录、性能优化和测试等关键点。作者以肥晨的身份结尾,鼓励关注其分享的前端学习资料和技术动态。
161 1
|
1月前
|
JavaScript NoSQL 数据库连接
使用Nodejs + express连接数据库mongoose
【6月更文挑战第3天】这篇文章介绍了如何在Express应用中使用Mongoose连接MongoDB数据库。首先,需要创建一个`db.js`文件,然后通过`npm install mongoose`安装Mongoose驱动。接着,在应用中引入MongoDB模块,建立到数据库的连接。创建一个Mongoose schema定义数据模型,如用户信息表。最后,执行数据库操作,包括查询、插入、更新和删除文档,并在完成后关闭数据库连接。文中还提供了相关代码示例。
157 1
|
1月前
|
JSON JavaScript 中间件
Node.js Express 框架
Node.js Express 框架
18 0
|
2月前
|
开发框架 JSON JavaScript
Node.js教程-express框架
Node.js教程-express框架
51 1
|
2月前
|
JSON JavaScript 前端开发
超级实用!详解Node.js中的util模块和express模块
超级实用!详解Node.js中的util模块和express模块
|
2月前
|
开发框架 JavaScript 中间件
node+express搭建服务器环境
node+express搭建服务器环境
node+express搭建服务器环境
|
2月前
|
JavaScript 中间件 API
中间件应用Express.js(Node.js)
【5月更文挑战第3天】我们定义了一个名为 `logger` 的中间件函数。它接受请求对象、响应对象以及下一个中间件函数作为参数。当接收到请求时,它会打印出请求的 HTTP 方法和 URL,然后调用 `next()` 函数来将控制权传递给下一个中间件或路由处理器。我们使用 `app.use()` 方法将 `logger` 中间件添加到了应用级别的中间件堆栈中,这意味着它将对所有请求生效。
36 3
中间件应用Express.js(Node.js)