express官网学习笔记

    npm init 创建一个package.json
    npm install express --save-dev 安装到项目依赖 便于多人开发

    路由结构定义
        app.METHOD(PATH, HANDLER);    
            假定app是一个express的实例 app = express();
            METHOD 是某个HTTP请求方式之一
            PATH 是服务器端的路径
            HANDLER 是当路由匹配到时 需要执行的函数

    托管静态文件 图片 css js
        app.use(express.static("public")) 
            访问 localhost:3000/img/hha.png

            将静态资源文件所在的目录作为参数传递给express.static中间件就可以提供静态资源文件了
            可以多次使用 依次访问  
                app.use(express.static("public")) 
                app.use(express.static("static")) 
            存放虚拟目录
                app.use("/static", express.static("public"));
                    访问 localhost:3000/static/img/hha.png
        
    路由详解
        app.use("/", callback);
            特殊的路由方法 没有一种http请求与其对应 
            作用 
                对于一个路径上的所有请求加载中间件
                可以做一些基本的校验

        路由路径
            字符串路径请求
                /               匹配根路径
                /about          匹配/about路径请求
                /random.text    匹配random.text路径请求  
            字符串模式路径请求
                /ab?cd          匹配acd 和 abcd 问号 一个或者零个
                /ab+cd          匹配abcd abbcd  加号 一个或者多个
                /ab*cd          匹配abcd abxcd ab scjsf cd 等 * 任意字符 可以没有
                /ab(cd)?e       匹配abe abcde  问号 一个或者零个
            正则匹配路径
                /a/             匹配任何含有a的路路径
                /.*fly$/        匹配 $以fly结尾 *有或者没有字符

        响应方法
            响应对象的方法向客户端返回响应 终结请求响应的循环 不响应 客户端请求挂起直到请求超时
            res.download()              提示下载文件
            res.end()                   终结响应处理流程
            res.json()                  发送一个JSON格式的响应
            res.jsonp()                 发红一个JSONP的JSON格式响应
            res.redirect()              重定向请求
            res.render()                渲染视图模版
            res.send()                  发送各种类型的响应
            res.sendFile()              以八字节流的形式发送文件
            res.sendStatus()            设置响应状态码 并将其以字符串的形式作为响应体的一部分发送
        app.route() 
            创建链式路由 
            app.route("/book")
                .get(callback)
                .post(callback)
                .put(callback);
        express.Router
            可用express.Router类创建模块化 可挂载的路由句柄
            myapp 的router文件夹下birds.js

    中间件
        中间件是一个函数 可以访问 req res 和web中出于请求和响应环节流程中间的中间件 
        中间件如果没有终结请求-响应循环 必须调用next()方法将控制权交给下一个中间件

        功能
            执行任何代码
            修改请求和响应对象
            终结请求-响应循环
            调用堆栈中的下一个中间件
        中间件分类
            应用级中间件
                应用级中间件绑定到app对象 使用 app.use() app.METH()

                //没有挂在路径的中间件 应用的每个请求都会执行该中间件
                app.use(function(req, res, next){})

                //挂载到/user/:id的中间件 任何指向/user/:id的请求都会执行他
                app.use("/user/:id", function(req, res, next){})

                //路由和句柄函数(中间件系统), 处理指向/user/:id的get请求
                app.get("/user/:id", function(req, res, next){})

                如果需要在中间件中跳过剩余中间件 可调用next("route")方法将控制权交给下一个路由
            路由中间件
                效果和应用中间件相同 
                next("route") //跳过中间件 跳到下一个路由    
            错误处理中间件
                四个参数 err, req, res, next
                必须是四个参数 不然会认为是普通中间件
            内置中间件
                只有一个 express.static(root, [option])
                应用可以设置多个静态目录
                option 是一个对象 拥有如下属性
                    dotfiles:       是否对外输出文件以(.)开头的文件 可选值 allow deny ignore
                    etag:           是否启动etag生成
                    extensions:     设置文件扩展名备份选项
                    index:          发送目录文件索引 设置为false时禁用目录索引
                    lastModified:   设置last-Modified头为文件在操作系统上的最后修改日期 值为 boolean
                    maxAge:         以毫秒或字符串格式设置 Cache-Contorl头的max-age属性
                    redirect:       当路径为目录时 重定向dao/
                    setHeaders:     设置HTTP头以提供文件的函数
            第三方中间件
                var cookieParser = require("cookie-parser
                加载用于解析cookie的中间件
                app.use(cookieParser());

    模版引擎
        需要设置views view engine才能让Express渲染模版引擎
            views       放模版文件的目录    app.set("views", "./views")
            view engine 模版引擎           app.set("view engine", "jade")
        安装模版引擎npm软件包
            npm install jade --save-dev
        view engine 设置成功之后 就不需要指定引擎 或者应用中加载模版引擎模块
            app.set("view engine", "jade");
            index.jade
                html
                    head
                    title!= title
                    body
                    h1 #{title}
            创建一个路由渲染index.jade文件 如果没有设置 view engine 需要指明视图文件的后缀 否者会遗漏
            app.get("/", function(req, res){
                res.render("index", {title:"express jade"});
            })

    错误处理
        app.use(logErrors); next()
        app.use(clientErrorHandler); next()
        app.use(errorHandler);
    调试Express
        DEBUG=express:* node index.js 可以查看所有日志
        DEBUG=express:router 只查看路由部分的日志
        DEBUG=express:application 只查看应用部分的日志

        DEBUG=http,mail,express:* node index.js 通过逗号隔开的名字列表来指定多个调试命名空间

注意:
    中间件(路由 应用中间件)如果没有终结请求-响应循环 必须调用next()方法将控制权交给下一个中间件





posted on 2017-12-28 16:35  刘先坤  阅读(221)  评论(0编辑  收藏  举报

导航