zoukankan      html  css  js  c++  java
  • express 学习笔记(一)路由

    先导入express:

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

    1.路由方法:

        getpostputheaddeleteoptionstracecopylockmkcolmovepurgepropfindproppatchunlockreportmkactivitycheckoutmergem-searchnotifysubscribeunsubscribepatchsearch, 和 connect

      常用的get,post

    app.get('/', function (req, res) {
      res.send('GET request to the homepage');
    });
    特殊的all方法

    app.all() 是一个特殊的路由方法,没有任何 HTTP 方法与其对应,它的作用是对于一个路径上的所有请求加载中间件
    app.all('/secret', function (req, res, next) {
      console.log('Accessing the secret section ...');
      next(); // pass control to the next handler
    });
    来自 “/secret” 的请求,不管使用 GET、POST、PUT、DELETE 或其他任何http模块支持的 HTTP 请求,句柄都会得到执行。

    2.路由路径
    路由路径可以是普通字符串,也可以是正则表达式
    普通路径:
    // 匹配根路径的请求
    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');
    });
    
    // 匹配 abcd、abbcd、abbbcd等
    app.get('/ab+cd', function(req, res) {
      res.send('ab+cd');
    });
    
    // 匹配 abcd、abxcd、abRABDOMcd、ab123cd等
    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');
    });

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

    // 匹配任何路径中含有 a 的路径:
    app.get(/a/, function(req, res) {
      res.send('/a/');
    });
    
    // 匹配 butterfly、dragonfly,不匹配 butterflyman、dragonfly man等
    app.get(/.*fly$/, function(req, res) {
      res.send('/.*fly$/');
    });
    路由句柄
    可以为请求处理提供多个回调函数,其行为类似中间件。唯一的区别是这些回调函数有可能调用 next('route') 方法而略过其他路由回调函数。可以利用该机制为路由定义前提条件

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

    app.get('/example/a', 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!');
    });

    响应方法:
    res.download() 提示下载文件。
    res.end() 终结响应处理流程。
    res.json()发送一个 JSON 格式的响应.
    res.jsonp()发送一个支持 JSONP 的 JSON 格式的响应.
    res.redirect()重定向请求。
    res.render() 渲染视图模板。
    res.send()发送各种类型的响应。
    res.sendFile()以八位字节流的形式发送文件。
    res.sendStatus()设置响应状态代码,并将其以字符串形式作为响应体的一部分发送。

    express.Router
    可使用 express.Router 类创建模块化、可挂载的路由句柄。Router 实例是一个完整的中间件和路由系统,因此常称其为一个 “mini-app”。

    在 app 目录下创建名为 birds.js 的文件,内容如下:

    
    
    var express = require('express');
    var router = express.Router();
    
    // 该路由使用的中间件
    router.use(function timeLog(req, res, next) {
      console.log('Time: ', Date.now());
      next();
    });
    // 定义网站主页的路由
    router.get('/', function(req, res) {
      res.send('Birds home page');
    });
    // 定义 about 页面的路由
    router.get('/about', function(req, res) {
      res.send('About birds');
    });
    
    module.exports = router;
    
    
    

    然后在应用中加载路由模块:

    
    
    var birds = require('./birds');
    ...
    app.use('/birds', birds);


     




  • 相关阅读:
    Cesium的类-Camera
    FTP文件操作之上传文件
    cnBlog 的windows live writer 客户端配置
    Windows 7 USB DVD Download Tool 制作的U盘无法启动安装Windows7 SP1
    存储过程中对于文本是两个单引号,而不是一个单引号或者一个双引号
    BackGroundWorker使用总结
    SQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差别
    T-SQL中default值的使用
    partial 的好处
    sql where 1=1和 0=1 的作用
  • 原文地址:https://www.cnblogs.com/ada-blog/p/9250756.html
Copyright © 2011-2022 走看看