NODE-WEB02:Web后端开发框架Express

  当Javascript发迹于浏览器市场,然后向C/C++,Java,C#等语言看齐的时候,传统语言该有的Javascript都会存在。其中Web后端开发是必不可少,Javascript的Web后端开发技术,本主题介绍一款通用的框架Express。本主题主要内容:
  1. Express编程模式;
  2. Express核心组件;
  3. Express的模板使用;


  介绍这个知识的目的是想用于如下两个场景:
    1. 区块链的DApp应用开发;
    2. 人工智能Web训练平台应用开发(Tensorflow已经提供Javascript开发API);


关于Express

Express的工作原理

  • Express与我们前面写的Http Server一样的工作原理,但是封装了更加丰富强大的功能:
    1. 创建Http Server
    2. 更加方便的处理请求Request与相应Response
      • get请求方法
      • post请求方法
    3. 求URL的资源(Web页面)路由
      • 资源管理规范
    4. 强大Web页面结构模板;
    5. 同时提供了数据处理与解析的相关模块:
      • body-parer:处理JSON,Text等数据
      • cookie-parser:处理Cookie
      • multer:处理表单上传数据

Express的安装

  • 为了不污染系统的node_modules,采用当前项目安装。
    • 首先创建一个工程;
    • 然后在该工程目录下安装;
    • 工程目录
  • express安装指令:
    • npm install express
      • 没有采用全局安装,全局安装某些时候需要root权限。
      • 安装过程

使用模式

Express开发模式主要步骤

  1. 创建express对象
  2. 定义访问url-pattern
  3. 使用express对象启动HTTP服务

代码示例


    // 第 01 步
    // 引入express类
    var express = require('express');
    // 创建express对象
    var app = express();

    // 第 02 步
    app.get('/index.html', function (req, res) {
        // 响应头等通信细节,都由Express框架自动处理,这里只需要直接发送数据,也可以加载html资源发送。
       var html = '<!doctype html>';
       html += '<html>';
       html += '<head><title>Express例子</title><meta charset="uft-8"></head>';
       html += '<body>';
       html += 'Express框架';
       html += '</body>';
       html += '</html>';

       res.send(html);

    })


    // 第 03 步
    var server = app.listen(
        9999, 
        function () {
            var host = server.address().address;
            var port = server.address().port;
            console.log("Web服务器启动,访问地址为 http://%s:%s", host, port);
        }
    );


运行测试

  1. 启动服务器程序

    • node e01_express_server.js
  2. 使用浏览器访问

    • 浏览器访问

Express核心组件

Express核心组件说明

  • Express的核心组件的可以从帮助文档获取
    • http://www.expressjs.com.cn/4x/api.html
      • Application: express类
      • Request类
      • Response类
      • Router类
    • 核心组件的API文档
  • 上面几个核心组件合作关系相对来说还是比较复杂,所以express提供了一个工具express-genertor来创建一个结构化的express项目

express-generator

安装

  • 因为要使用express工具,需要全局安装,安装指令:
    • sudo npm install express express-generator -g --unsafe-perm
    • 全局安装的mac用户控制选项

创建express项目

  • 创建指令(默认是jade模板)
    • express jade_demo
    • 创建基于JADE模板的项目工程

express项目结构解析

  • express的项目结构目录如下:
    • 工程项目结构
  • 目录说明:(MVC)
    • bin:Http服务器的js脚本,使用node可以直接执行
    • public:浏览器可以直接使用的静态资源(CSS,浏览器使用的js脚本,HTML,图像等资源)
    • routes:路由器对象封装(属于模式层接口)
    • views:jade,pug或者ejs模板视图文件(视图层)
    • app.js:Express的核心配置(可以作为控制器)
    • package.json:所有项目模块的依赖配置等
      • 其中配置了使用npm可以直接运行的脚本配置:"start": "node ./bin/www"
  • 启动服务
    • node ./bin/www

    • npm start

    • 注意:

      • 运行缺少包的错误提示,可以自行安装;
        • 我运行的时候补安装了两个:cookie-parser 与Morgan模块
        • 运行时,还需要安装jade或者pug(pug是jade升级版本,jade不推荐使用了)
      • 环境依赖安装大招:
        • 使用npm install安装相关依赖;
        • npm install也有大用途

模板

  • Express提供三种模板支持:

    1. jade(被pug替代,不推荐使用,下面可以看看不推荐的理由,晦涩的语法,与HTML不同的语法)
    2. pug(Jade的升级版本)
    3. ejs
    4. hbs(handlebars)
    5. hogan
  • I模板选择与视图选择

jade模板语法例子

  • 这种语法规则需要重新学习,起码得熟悉下才能使用,不是可以直接上手的。
    doctype html
    html
      head
        title= title
        link(rel='stylesheet', href='/stylesheets/style.css')
      body
        block content

pug模板语法例子

  • jade的升级版本
    extends layout

    block content
      h1= title
      p Welcome to #{title}

ejs模板语法例子

  • 推荐使用ejs,这个与asp,jsp类似的常规语法,学习成本低。
    <!DOCTYPE html>
    <html>
      <head>
        <title><%= title %></title>
        <link rel='stylesheet' href='/stylesheets/style.css' />
      </head>
      <body>
        <h1><%= title %></h1>
        <p>Welcome to <%= title %></p>
      </body>
    </html>

hbs模板语法例子

  • 采用框架结构与操作区分隔的方式,灵活性不足
    <!DOCTYPE html>
    <html>
      <head>
        <title>{{title}}</title>
        <link rel='stylesheet' href='/stylesheets/style.css' />
      </head>
      <body>
        {{{body}}}
      </body>
    </html>

hogan模板语法例子

  • 采用ejs与jade的综合方便语法
    <!DOCTYPE html>
    <html>
      <head>
        <title>{{ title }}</title>
        <link rel='stylesheet' href='/stylesheets/style.css' />
      </head>
      <body>
        <h1>{{ title }}</h1>
        <p>Welcome to {{ title }}</p>
      </body>
    </html>

engine与View engine的区别

  • engine用来把模板翻译成html,只支持如下五种:

    1. jade
    2. pug
    3. ejs
    4. hbs
    5. hogan
  • view engine是设置模板的扩展名,在代码中是不要指定扩展名的

    • *.jade
    • *.dust
    • *.ejs
    • *.hbs
    • *.hjs
    • *.pug
    • *.twig
    • *.vash
    • no view直接使用html
      • 使用静态的资源,不支持视图数据层。

  • 4大核心组件的详细说明,因为不是主要目标,这里暂时不详细介绍,先留白。
  1. # Router组件

    • 负责用户访问的逻辑url-pattern(前)与实际页面(后)服务渲染的映射关系;
  2. # Response组件

    • 负责http相应,包含页面渲染的调用服务(页面渲染的实际实现再Application对象中实现);
      • 包括传递给渲染器(renderer)的数据
  3. # Request组件

    • 负责用户的请求处理,包含表单数据,上传数据的处理;
  4. # Application组件

    • 负责一些配置与公共功能的实现;

参考资源


  • 说明:本主题是梳理技术点,没有争对具体的技术细节介绍。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容