简介
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 监听中...');
});
动态资源:内容时常会发生改变的。包含但不限于:首页、列表页、购物车、订单...