Contents
  1. 1. 一、express 的介绍和安装
    1. 1.0.0.1. 1. 为什么要使用express?
    2. 1.0.0.2. 2. express 的安装
    3. 1.0.0.3. 3. express基本感知
    4. 1.0.0.4. 4. 利用express打开页面
  • 2. 二、 Exprerss基本操作
    1. 2.0.1. 1. send
    2. 2.0.2. 2. Express中的static-sever静态资源服务
    3. 2.0.3. 3.使用nodemon 工具自动重启服务
    4. 2.0.4. 4. 在Express中配置使用art-template模板引擎
      1. 2.0.4.1. a. 安装
      2. 2.0.4.2. b. 使用
    5. 2.0.5. 5. 在Express中渲染模板引擎
    6. 2.0.6. 6. 在Express中配置解析表单Post请求体数据
  • 3. 留言本实例
    1. 3.0.1. 1.配置文件和下载node-modules
    2. 3.0.2. 2. 编写入口文件
      1. 3.0.2.1. 1. 文件结构
      2. 3.0.2.2. 4. 配置要使用的包
      3. 3.0.2.3. 3. 编写入口文件
      4. 3.0.2.4. 4.编写页面
        1. 3.0.2.4.1. a. index页面
      5. 3.0.2.5. b. post页面
      6. 3.0.2.6. c. 404 页面
  • 最近在学习express,真的是发现到了他的强大之处,这篇博客介绍了express的基本操作,也会做一个简单的留言本demo,嘻嘻~

    一、express 的介绍和安装

    1. 为什么要使用express?

    首先express是一个node框架。其次,原生的http在某些方面的表现不足以应对开发需求,则使用框架,一是提高效率,二是让代码高度统一。
    express官网:http://expressjs.com/

    2. express 的安装

    npm install express –save

    3. express基本感知

    首先先创建一个文件夹,配置package.json文件:

    npm init -y

    下载node_modules:

    npm install

    下载express

    npm install express –save

    (如果还存在对这些命令有疑惑的地方,请翻看上一篇博客npm的使用)



    在这里我的目标文件叫做 app.js

    1
    2
    3
    4
    5
    6
    7
    var express = require('express')  //引包
    app.get('/',function(req, res){
    res.send('hello my is express!')
    })
    app.listen(3000, function(){
    console.log('app is running at port 3000...')
    })

    然后在终端里输入 node app.js之后,在浏览器打开127.0.0.1:3000,则会看到以下页面:

    express基本感知

    4. 利用express打开页面

    我的文件结构如下图所示,与app.js同级的目录下有一个views文件下的index.html文件,内容如下:
    文件结构
    需要引入fs:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

    var express = require('express')
    var fs = require('fs')
    var app = express()
    p.get('/', function(req, res){
    fs.readFile('.iews/index.html', function(err, data){
    if(err){
    return res.end('404 not found')
    }else{
    res.end(data)
    }
    })

    })
    app.listen(3000, function(){
    console.log('app is running at port 3000...')
    })

    打开浏览器端口号就可以看到输出的页面了~
    输出页面

    二、 Exprerss基本操作

    1. send

    res.send(“hello”)

    其实原来在node里使用的end(),write()都可以在express中使用,但是express有一个更好用的函数send(),使用之后就可以不用end()来结束了,可以自动节结束响应。

    2. Express中的static-sever静态资源服务

    基本路由有两种形式:get 和 post
    使用一个基本路由需要做三件事:
    -1. 请求方法
    -2. 请求路径
    -3. 请求处理函数
    例如:在public下有一个index.html文件,需要访问这个文件可以使用以下三种方式:

    app.use(‘/public/‘, express.static(‘./public/‘))
    //127.0.0.1:3000/public/index.html

    必须是 /a/puiblic目录中的资源具体路径

    app.use(‘/a/‘, express.static(‘./public/‘))
    //127.0.0.1:3000/a/index.html

    省略 /public 的方式来访问

    app.use(express.static(‘./public/‘))
    //127.0.0.1:3000/index.html

    通常第一种方法容易辨识,推荐使用第一种方法。

    3.使用nodemon 工具自动重启服务

    nodemon: 一个第三方命令行工具,用来解决频繁修改代码重启服务器问题
    是一个基于node.js开发的命令行工具
    下载:

    npm install –global nodemon

    使用:

    nodemon app.js

    将原来的node换成nodemon就可以了,用来监视文件变化

    4. 在Express中配置使用art-template模板引擎

    a. 安装

    npm install –save art-template
    npm install –save express-art-template

    b. 使用

    app.engine(‘html’, require(‘express-art-template’))

    参一表示:当渲染以 .art 结尾的文件的时候,使用 art-template 模板引擎


    解释为什么express使用模板引擎时还要装art-template

    express-art-template 是专门用来在 Express 中把 art-template 整合到 Express 中,虽然外面这里不需要记载 art-template 但是也必须安装,原因就在于 express-art-template 依赖了 art-template

    5. 在Express中渲染模板引擎

    Express 为 Response 相应对象提供了一个方法:render
    render 方法默认是不可以使用,但是如果配置了模板引擎就可以使用了
    使用方法:

    res.render(‘html模板名’, {模板数据})

    第一个参数不能写路径,默认会去项目中的 views 目录查找该模板文件,也就是说 Express 有一个约定:开发人员把所有的视图文件都放到 views 目录中

    如果想要修改默认的 views 目录,则可以:

    app.set(‘views’, render函数的默认路径)

    6. 在Express中配置解析表单Post请求体数据

    当以 POST 请求 /post 的时候,执行指定的处理函数

    app.post(‘/post’)

    参一是方法,参二是路径标识

    作用是:
    这样的话我们就可以利用不同的请求方法让一个请求路径使用多次


    在get请求里,有一个req.query,但是这个只能拿get请求参数
    在post请求里,没有内置获取表单post请求的API,则可以使用body-parser

    使用方法:

    1. 引包:

      var bodyParser = require(‘body-parser’)

    2.配置body-parser

    1
    2
    3
    4
    5
    // 配置 body-parser 中间件(插件,专门用来解析表单 POST 请求体)
    // parse application/x-www-form-urlencoded
    app.use(bodyParser.urlencoded({ extended: false }))
    // parse application/json
    app.use(bodyParser.json())

    只要加入了这个配置,则在req的请求对象上会多出来一个属性:body
    可以直接通过req.body来获取表单post请求数据。

    留言本实例

    1.配置文件和下载node-modules

    npm init -y
    npm install –save express
    npm install –save art-template
    npm install –save express-art-template

    2. 编写入口文件

    1. 文件结构

    这是我的一个文件结构
    文件结构

    4. 配置要使用的包

    在public目录的lib下放入要使用的bootstrap文件,按照

    href=”/public/lib/bootstrap/dist/css/bootstrap.css”

    3. 编写入口文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62

    var express = require('express')
    var bodyParser = require('body-parser')
    var app = express()
    app.use('/public/', express.static('./public/'))
    app.engine('html', require('express-art-template'))

    // 配置 body-parser 中间件(插件,专门用来解析表单 POST 请求体)
    // parse application/x-www-form-urlencoded
    app.use(bodyParser.urlencoded({ extended: false }))
    // parse application/json
    app.use(bodyParser.json())
    var comments = [{
    name: '张三',
    message: '今天天气不错!',
    dateTime: '2015-10-16'
    },
    {
    name: '张三2',
    message: '今天天气不错!',
    dateTime: '2015-10-16'
    },
    {
    name: '张三3',
    message: '今天天气不错!',
    dateTime: '2015-10-16'
    },
    {
    name: '张三4',
    message: '今天天气不错!',
    dateTime: '2015-10-16'
    },
    {
    name: '张三5',
    message: '今天天气不错!',
    dateTime: '2015-10-16'
    }
    ]

    app.get('/', function(req, res){
    res.render('index.html', {
    comments:comments
    })
    })
    app.get('/post', function(req, res){
    res.render('post.html')
    })/*
    app.get('/pinglun', function(req, res){
    var comment = req.query
    comment.dateTime = '2018-10-14 11:01:22'
    comments.unshift(comment)
    res.redirect('/')//返回首页
    })*/
    app.post('/post', function(req, res){
    var comment = req.body
    comment.dateTime = '2018-10-14 11:01:22'
    comments.unshift(comment)
    res.redirect('/')//返回首页
    })
    app.listen(3000, function(req, res){
    console.log('running...')
    })

    4.编写页面

    a. index页面
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27

    <!DOCTYPE html>
    <html lang="en">

    <head>
    <meta charset="UTF-8">
    <title>留言本</title>
    <link rel="stylesheet" href="/public/lib/bootstrap/dist/css/bootstrap.css">
    </head>

    <body>
    <div class="header container">
    <div class="page-header">
    <h1>Example page header <small>Subtext for header</small></h1>
    <a class="btn btn-success" href="/post">发表留言</a>
    </div>
    </div>
    <div class="comments container">
    <ul class="list-group">
    {{each comments}}
    <li class="list-group-item">{{ $value.name }}说:{{ $value.message }} <span class="pull-right">{{ $value.dateTime }}</span></li>
    {{/each}}
    </ul>
    </div>
    </body>

    </html>

    b. post页面

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32

    <!DOCTYPE html>
    <html lang="en">

    <head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="/publicb/bootstrap/dist/css/bootstrap.css">
    </head>

    <body>
    <div class="header container">
    <div class="page-header">
    <h1><a href="/">首页</a> <small>发表评论</small></h1>
    </div>
    </div>
    <div class="comments container">
    <form action="/post" method="post">
    <div class="form-group">
    <label for="input_name">你的大名</label>
    <input type="text" class="form-control" required minlength="2" maxlength="10" id="input_name" name="name" placeholder="请写入你的姓名">
    </div>
    <div class="form-group">
    <label for="textarea_message">留言内容</label>
    <textarea class="form-control" name="message" id="textarea_message" cols="30" rows="10" required minlength="5" maxlength="20"></textarea>
    </div>
    <button type="submit" class="btn btn-default">发表<tton>
    </form>
    </div>
    </body>

    </html>

    c. 404 页面

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Document</title>
    </head>
    <body>
    <h1>抱歉! 您访问的页面失联啦...</h1>
    </body>
    </html>
    Contents
    1. 1. 一、express 的介绍和安装
      1. 1.0.0.1. 1. 为什么要使用express?
      2. 1.0.0.2. 2. express 的安装
      3. 1.0.0.3. 3. express基本感知
      4. 1.0.0.4. 4. 利用express打开页面
  • 2. 二、 Exprerss基本操作
    1. 2.0.1. 1. send
    2. 2.0.2. 2. Express中的static-sever静态资源服务
    3. 2.0.3. 3.使用nodemon 工具自动重启服务
    4. 2.0.4. 4. 在Express中配置使用art-template模板引擎
      1. 2.0.4.1. a. 安装
      2. 2.0.4.2. b. 使用
    5. 2.0.5. 5. 在Express中渲染模板引擎
    6. 2.0.6. 6. 在Express中配置解析表单Post请求体数据
  • 3. 留言本实例
    1. 3.0.1. 1.配置文件和下载node-modules
    2. 3.0.2. 2. 编写入口文件
      1. 3.0.2.1. 1. 文件结构
      2. 3.0.2.2. 4. 配置要使用的包
      3. 3.0.2.3. 3. 编写入口文件
      4. 3.0.2.4. 4.编写页面
        1. 3.0.2.4.1. a. index页面
      5. 3.0.2.5. b. post页面
      6. 3.0.2.6. c. 404 页面