路由路径和请求方法一起定义了请求的端点,它可以是字符串、字符串模式或者正则表达式。后端在获取路由后,可通过一系列类似中间件的函数去执行事务。

可使用字符串的路由路径:

// 匹配根路径的请求
app.get('/', function (req, res) {
res.send('root');
}); // 匹配 /about 路径的请求
app.get('/about', function (req, res) {
res.send('about');
}); // 匹配 /random.text 路径的请求
app.get('/random.text', function (req, res) {
res.send('random.text');
});

可使用字符串模式的路由路径:

// 匹配 acd 和 abcd
app.get('/ab?cd', function(req, res) {
res.send('ab?cd');
}); // 匹配 /abe 和 /abcde
app.get('/ab(cd)?e', function(req, res) {
res.send('ab(cd)?e');
});

可使用正则表达式的路由路径:

// 匹配 butterfly、dragonfly,不匹配 butterflyman、dragonfly man等
app.get(/.*fly$/, function(req, res) {
res.send('/.*fly$/');
});

可以为请求处理提供多个回调函数,其行为类似中间件。唯一的区别是这些回调函数有可能调用 next('route') 方法而略过其他路由回调函数。可以利用该机制为路由定义前提条件,如果在现有路径上继续执行没有意义,则可将控制权交给剩下的路径。

路由句柄有多种形式,可以是一个函数、一个函数数组,或者是两者混合,如下所示

使用一个回调函数处理路由:

app.get('/example', function (req, res) {
res.send('Hello from A!');
});

使用多个回调函数处理路由(记得指定 next 对象):

app.get('/example/b', function (req, res, next) {
console.log('response will be sent by the next function ...');
next();
}, function (req, res) {
res.send('Hello from B!');
});

使用回调函数数组处理路由:

var cb0 = function (req, res, next) {
console.log('CB0');
next();
} var cb1 = function (req, res, next) {
console.log('CB1');
next();
} var cb2 = function (req, res) {
res.send('Hello from C!');
} app.get('/example/c', [cb0, cb1, cb2]);

混合使用函数和函数数组处理路由:

var cb0 = function (req, res, next) {
console.log('CB0');
next();
} var cb1 = function (req, res, next) {
console.log('CB1');
next();
} app.get('/example/d', [cb0, cb1], function (req, res, next) {
console.log('response will be sent by the next function ...');
next();
}, function (req, res) {
res.send('Hello from D!');
});

可使用 express.Router 类创建模块化、可挂载的路由句柄。Router 实例是一个完整的中间件和路由系统。

var log=require("./log/log");
var express=require("express");
var app=express(); //首先定义一个路由
var router=express.Router(); //使用中间件
router.use(function firstFunc(req,res,next){
console.log("Time: ",Date.now());
next();
}); //如果是根目录
router.get("/",function(req,res){
res.send("home page");
}); //如果是根目录下的about目录
router.get("/about",function(req,res){
res.send("about page");
}); //使用路由
//可输入http://127.0.0.1:8000/myRoot得到home page
//可输入http://127.0.0.1:8000/myRoot/about得到about page
//在得到返回的page之前,会先执行firstFunc函数
app.use("/myRoot",router); //开启站点
app.listen(,function(){
log.info("站点开启")
});

通过路由,可以在返回页面之前,先通过中间件执行若干事物,而且这些中间件是当前路由共享的,这样可以省去许多重复代码,增加代码可利用率的有效性。还可以将Router注册为模块导出,代码更加有可读性。

注明:以上学习内容来自:http://www.expressjs.com.cn/guide/routing.html

NodeJS之express的路由浅析的更多相关文章

  1. nodejs之express静态路由、ejs

    1.静态路由与ejs使用 /** *1.安装ejs npm install ejs --save-dev * *2.express 里面使用ejs ,安装以后就可以用,不需要引入 * *3.配置exp ...

  2. nodejs之express中间件路由使用

    1.express 中间件使用 /* * 中间件:就是匹配路由之前和匹配路由之后做的一系列操作 */ var express = require('express'); var app = new e ...

  3. [转] NodeJS框架express的途径映射(路由)功能及控制

    NodeJS框架express的路径映射(路由)功能及控制 我们知道Express是一个基于NodeJS的非常优秀的服务端开发框架,本篇CSSer将提供express框架的route和route co ...

  4. nodejs之express路由与动态路由

    1.快速创建express项目步骤 /** * 1.cd 到项目里面 * 2.npm init --yes 创建package.json文件 * 3.安装express * npm install e ...

  5. 77.深入理解nodejs中Express的中间件

    转自:https://blog.csdn.net/huang100qi/article/details/80220012 Express是一个基于Node.js平台的web应用开发框架,在Node.j ...

  6. 使用nodejs和express搭建http web服务

    目录 简介 使用nodejs搭建HTTP web服务 请求nodejs服务 第三方lib请求post 获取http请求的正文 Express和使用express搭建http web服务 express ...

  7. NodeJS 框架 Express 从 3.0升级至4.0的新特性

    NodeJS 框架 Express 从 3.0升级至4.0的新特性 [原文地址:√https://scotch.io/bar-talk/expressjs-4-0-new-features-and-u ...

  8. npm install Error:EPROTO: protocol error, symlink '../mime/cli.js' -> '/vagrant/src/nodejs/node_modules/express/node_modules/send/node_modules/.bin/mime'

    我在ubuntu上使用npm安装依赖是出现下面错误: npm ERR! Linux 3.13.0-101-genericnpm ERR! argv "/usr/bin/nodejs" ...

  9. 前端笔记之NodeJS(二)路由&REPL&模块系统&npm

    一.路由机制(静态资源文件处理) 1.1 Nodejs没有根目录 MIME类型:http://www.w3school.com.cn/media/media_mimeref.asp 在Apache中, ...

随机推荐

  1. linux网络编程--网络编程的基本函数介绍与使用【转】

    本文转载自:http://blog.csdn.net/yusiguyuan/article/details/17538499 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览 ...

  2. Python跨平台打包

    对于pyinstaller,可以完成在windows,linux,和mac下的python脚本编译,生成exe,elf,.app文件: 1.使用方法: 在pyinstaller的官网上下载,一般是源码 ...

  3. windows下的 gvim - su'blime text 的使用

    su'blime [s2'blaim] adj. n. 崇高的, 高尚的, 令人尊敬的; 壮丽的, 宏伟的; 出众的; 崇高的人, 壮丽的事物等等. a sublime mission. a subl ...

  4. 论文笔记:Mastering the game of Go with deep neural networks and tree search

    Mastering the game of Go with deep neural networks and tree search Nature 2015  这是本人论文笔记系列第二篇 Nature ...

  5. php跨域

    <?php header('Content-type:text/html; charset="utf-8"'); $url = 'http://10.32.41.194:80 ...

  6. 转:java项目经验面试总结

    转载: 在前期已经讲过怎样分析自己,对自己进行一个准确的定位,选择一个合适的求职方向!并结合自己的实际个人情况来写一份针对性很强的个人简历!个人简历就是个人的广告!好的简历可以更受到用人需求单位青睐! ...

  7. HDU 5877 Weak Pair(树状数组+dfs+离散化)

    http://acm.hdu.edu.cn/showproblem.php?pid=5877 题意: 给出一棵树,每个顶点都有权值,现在要你找出满足要求的点对(u,v)数,u是v的祖先并且a[u]*a ...

  8. 如何新建一个datatable,并往表里赋值

    顺序是新建对象-->新建列-->新建行,示例代码如下: DataTable dt=new DataTable(); //新建对象 dt.Columns.Add("姓名" ...

  9. C# 窗口模拟点击按钮或关闭窗口

    public class CloseForm { [DllImport("user32", EntryPoint = "FindWindow")] privat ...

  10. BZOJ 1758 【WC2010】 重建计划

    题目链接:重建计划 这道题现在已经成为一道板子题了…… 这是个非常显然的0-1分数规划,可以二分答案之后树分治判定一下.注意树分治的时候如果使用单调队列,需要把所有儿子预先按最大深度排好序,否则会被扫 ...