Express


  • 原生的 http 在某些方面表现不足以应对我们的开发需求, 所以就需要使用框架来加快开发效率
  • 官网: https://www.expressjs.com.cn/

安装:

> npm install express --save
// 0. 安装
// 1. 引包
const express = require('express');

// 2. 创建服务器应用程序
// 也就是原来的 http.createServer()
const app = express();

// 公开指定目录
// 只要这样做了,就可以直接通过 /public/xx 的方式访问 public目录中的所有资源了
app.use('/public/', express.static('./public/'));

// 当服务器收到 get 请求 / 的时候, 执行回调函数
app.get('/', (req, res) => {
    // 在 Express 中可以直接使用 req.query 来获取url传递的参数
    console.log(req.query);
    // 在 express 中 write 和 end 方法依然可以用
    // res.write('hello ');
    // res.end('express !')
    res.send('hello express!');
});


// 相当于 server.listen
app.listen(3000, () => {
    console.log('port 3000, Server is Running...');
});

1 基本路由

组成:

  • 请求方法
  • 请求路径
  • 请求处理函数

get:

// 当你以 GET 方法请求 / 的时候, 执行对应的处理函数
app.get('/',(req,res)=>{
    res.send('Hello World');
});

post:

// 当你以 POST 方法请求 / 的时候, 执行对应的处理函数
app.post('/',(req,res)=>{
    res.send('Got a POST request');
})

2 静态服务

// 引入
const express = require('express');
// 创建 app
const app = express();

// 当以 /public/开头的时候, 去 ./public/ 目录中查找对应的资源
app.use('/public/', express.static('./public'));

app.get('/', (req, res) => {
    res.send('hello world');
});

app.listen(3000, () => {
    console.log('express app is Running....');
});


访问 login.html 不省略第一个参数时:
在node中使用express框架_html

访问 login.html 省略第一个参数时:

// 当省略第一个参数的时候, 则可以通过省略 '/public' 的方式来访问对应资源
app.use(express.static('./public/'));

在node中使用express框架_数据_02

在node中使用express框架_模板引擎_03

特殊写法:

// 必须是 /a/public 目录中的资源具体路径
// 可以理解为  '/a/' 是 '/public/' 的别名
app.use('/a/', express.static('./public/'));

在node中使用express框架_数据_04

在node中使用express框架_html_05

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

安装:

npm install --save art-template
npm install --sava express-art-template

配置 :

// 第一个参数, 标识, 当渲染以 .html结尾(可更改)的文件的时候, 使用 art-template模板引擎
// express-art-template 是专门用来在 Express 中把 art-template 整合到 Express 中
// 虽然外面这里不需要加载 art-template , 但是也必须安装
// 原因就在于 express-art-template 依赖了 art-template
app.engine('html', require('express-art-template'));

使用:

// Express为 Response 响应对象提供了一个方法: reader
// reader 方法默认是不可以使用的, 但是如果配置了模板引擎就可以使用了
// res.render('html模板名',{模板数据});
// 第一个参数不能写其他路径, 默认会去项目中的 views 目录查找该模板文件

app.get('/', (req, res) => {
    res.render('404.html');
});




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

app.set('views',要修改的路径);

实例演示

// E:\Exercises\Node\express-demo\feedback-express\express使用art-template.js
const express = require('express');

const app = express();
// 配置
app.engine('html', require('express-art-template'));

// 使用
app.get('/', (req, res) => {
    res.render('404.html');
});

app.get('/admin', (req, res) => {
    res.render('admin/index.html', {
        title: '管理系统'
    });
});


app.listen(3000, () => {
    console.log('running....');
});

在node中使用express框架_表单_06

在node中使用express框架_数据_07

4 在Express 中获取表单 POST 请求体数据

在 express 中没有内置获取表单 POST请求体的 API , 这里需要使用一个第三方包 : body-parser

安装:

npm install --sava body-parser

配置:

var express = require('express')
// 0. 引包
var bodyParser = require('body-parser')

var app = express()

// 配置 body-parser
// 只要加入这个配置, 则在 req请求对象上会多出来一个属性: body
// 也就是说可以直接通过req.body 来获取表单 POST请求体数据
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())

app.use(function (req, res) {
  res.setHeader('Content-Type', 'text/plain')
  res.write('you posted:\n')
  // 可以通过 req.body 来获取表单 POST 请求体数据
  res.end(JSON.stringify(req.body, null, 2))
})

5 在Express 中获取表单 GET 请求参数

Express 内置了一个 API , 可以直接通过 req.query来获取

req.query