跳到主要内容

简介

Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你快速创建各种 Web 和移动设备应用。

简单来说Express就是运行在node中的用来搭建服务器的模块。

npm i express --save 安装express并添加到依赖项

//1、安装 express
//2、引入 express 包
const express = require('express');
//3、创建应用对象
const app = express();
//4、路由的设置
app.get('/', (request, response) => {
response.end('Hello express');
});
//5、监听端口,启动服务
app.listen(80, () => {
console.log('服务已经启动,端口80监听中...');
});

路由(Route)

路由是指如何定义应用的端点(URIs)以及如何响应客户端的请求。
路由是由一个 URI、HTTP 请求(GET、POST等)和若干个句柄组成的。

定义: 我们可以将路由定义为三个部分:

  • 第一部分:HTTP请求的方法(get或post)
  • 第二部分:URI路径
  • 第三部分: 回调函数

Express中提供了一系列函数,可以让我们很方便的实现路由:

app.<method>(path,callback) 语法解析:

  • method指的是HTTP请求方法,比如:
  • app.get()
  • app.post()
  • path指要通过回调函数来处理的URL地址
  • callback参数是应该处理该请求并把响应发回客户端的请求处理程序

Route运行流程

  • 当Express服务器接收到一个HTTP请求时,它会查找已经为适当的HTTP方法和路径定义的路由
  • 如果找到一个,Request和Response对象会被创建,并被传递给路由的回调函数
  • 我们便可以通过Request对象读取请求,通过Response对象返回响应
  • Express中还提供了all()方法,可以处理两种请求。
const express = require('express');
const fs = require('fs');
const app = express();
//创建路由规则
app.get('/', (request, response) => {
response.send('路由界面');
});
app.get('/admin', (request, response) => {
//send() 方法是 express 封装的响应的方法
response.send('后台网页');
});
//显示登录页面
app.get('/login', (request, response) => {
const body = fs.readFileSync('./form.html');
response.end(body);
});
app.get('/register', (request, response) => {
response.send('注册页面');
});
app.post('/login', (request, response) => {
response.send('登录处理');
});
//all 方法,所有任意
app.all('/test', (request, response) => {
response.send('test');
});

app.get('/introduce', (request, response) => {
const body = fs.readFileSync('./intro.html');
response.end(body);
})
app.listen(80, () => {
console.log('服务已经启动...端口监听中...');
});

Request对象

  • Request对象是路由回调函数中的第一个参数,代表了用户发送给服务器的请求信息。
  • 通过Request对象可以读取用户发送的请求包括URL地址中的查询字符串中的参数,和post请求的请求体中的参数。

属性和方法:

  • request.query 获取get请求查询字符串的参数,拿到的是一个对象
  • request.params 获取get请求参数路由的参数,拿到的是一个对象
  • request.body 获取post请求体,拿到的是一个对象(要借助一个中间件)
  • request.get(xxx) 获取请求头中指定key对应的value
//引入express包
const express = require('express');
//创建应用对象
const app = express();
//路由的设置
app.get('/', (request, response) => {
//设置响应
response.send('Hello Express');
});
app.get('/req', (request, response) => {
//获取请求的方法
// console.log(request.method);
// //获取请求的url
// console.log(request.url);
// //获取请求的http协议版本
// console.log(request.httpVersion);
// //获取请求头信息
console.log(request.headers);
//获取查询字符串参数
console.log(request.query);
//获取指定的请求头信息
console.log(request.get('host'))

response.send('请求内容的获取');
});

//新闻的详情
//1、url规则中填写占位符(:标识符)
app.get('/news/:id.html', (request, response) => {
//2、获取url中的路径的参数
let id = request.params.id;
console.log(id);
response.send(`id 为 ${id} 的新闻`);
});

//模仿京东的路由设置
app.get('/:abc.html', (request, response) => {
let id = request.params.abc;
response.send('id 为 ' + id + '的商品信息');
});
//监听端口,启动服务
app.listen(80, () => {
console.log('服务已经启动...端口 80 监听中...');
});

Response对象

  • Response对象是路由回调函数中的第二个参数,代表了服务器发送给用户的响应信息。
  • 通过Response对象可以设置响应报文中的各个内容,包括响应头和响应体。

属性和方法:

  • response.send() 给浏览器做出一个响应
  • response.end() 给浏览器做出一个响应(不会自动追加响应头)
  • response.download() 告诉浏览器下载一个文件
  • response.sendFile() 给浏览器发送一个文件
  • response.redirect() 重定向到一个新的地址(url)
  • response.set(header,value) 自定义响应头内容
  • res.status(code) 设置响应状态码
//引入express包
const express = require('express');
//创建应用对象
const app = express();
//路由的设置
app.get('/res', (request, response) => {
//响应状态码
// response.statusCode = 200;
response.status(500);
//响应状态字符串
response.statusMessage = 'ok';
//响应头设置
// response.setHeader('week','3');
// response.setHeader('Content-type','text/html;charset=utf-8');
// response.set('a','100');

//响应体
// response.write('hello');

//设置响应
response.send('今后我们来度过满是愉快之事的人生吧');
//下载响应
// response.download('./package.json');
//将一个文件中的内容响应给浏览器(必须为绝对路径)
// response.sendFile(__dirname + '/form.html');
//跳转
// response.redirect('https://www.baidu.com');

});

//监听端口,启动服务
app.listen(80, () => {
console.log('服务已经启动...端口 80 监听中...');
});

静态资源/动态资源

静态资源:长时间不发生改变的资源。css、js、图片、音频、视频、字体...

//引入express包
const express = require('express');
//创建应用对象
const app = express();
//配置网站的根目录
app.use(express.static(__dirname + '/public'));
//路由
app.get('/home', (request, response) => {
response.send('home 页面');
});
app.get('/home.html', (request, response) => {
response.send('<h1>Home.html</h1>');
});
app.get('/videos', (request, response) => {
//数据处理:读取数据库,读取文件
response.send('电源的列表页');
});
//监听端口,启动服务
app.listen(80, () => {
console.log('服务已经启动...端口 80 监听中...');
});

动态资源:内容时常会发生改变的。包含但不限于:首页、列表页、购物车、订单...