这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战
Express框架
什么是Express
Express 是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能。
- Express是一个能够搭建Web服务器的框架
- Express保留了http模块的基本API,也就是说使用Express时也能使用req和res对象
- Express还额外封装了一些方法,能让我们更方便的搭建服务器
- Express提供了中间件功能,其他很多强大的第三方模块都是基于express开发的
使用Express构造Web服务器
// 下载 express 模块
npm i express
复制代码
使用Express构建Web服务器步骤:
- 加载 express 模块
- 创建 express 服务器
- 开启服务器
- 监听浏览器请求并进行处理
//目标: 创建并启动Web服务器,并在浏览器上显示内容
//1. 加载 express 模块
const express = require('express');
//2. 创建服务器
const app = express();
//3. 启动服务器
app.listen(3000, () => {
console.log('express-server is running...');
});
//4. 监听浏览器请求
//app.post() 来监听post请求
//app.get() 来监听get请求
//当url地址为: http://127.0.0.1:3000/index 时,
//进入下面方法来进行处理
//参数1: url地址
//参数2: 当监听到浏览器请求之后触发的回调函数
// req: 请求对象,就是http模块中的 req对象
// res: 响应对象,就是http模块中的 res对象
app.get('/index', (req, res) => {
//end方法也是http模块提供的方法
res.end('Hello Express');
})
//当url地址为: http://127.0.0.1:3000/list 时,
//进入下面方法来进行处理
app.get('/list', (req, res) => {
//send方法是express提供的方法
res.send('列表页');
})
//其他的地址一概进入下面来处理
app.get('*' , (req, res) => {
res.end('404 not found');
})
复制代码
总结:
- 使用express构造服务器也是4步流程:
① 加载express模块 const express = require('express');
② 创建express服务器 const app = express();
③ 开启express服务器 app.listen(3000, () => {})
④ 注册服务器事件 app.get(url, callback) app.post(url, callback)
复制代码
- 注册服务器事件有两个方法: get() 和 post()
get方法用来接收get请求,浏览器地址栏发起的请求都是get请求
post方法用来接收post请求,接收post表单提交的请求
复制代码
- express框架封装了一些额外的API(例如:send),可以让我们更方便的构造Web服务器
- 浏览器请求的每一个url地址都会由一个独立方法接收并处理,没有了 if … else if … else 这样的分支,程序结构 更加清晰
路由
简单来说,路由就是浏览器中url地址和app.get/app.post方法中参数1的对应的关系
例如:
// 浏览器地址: http://127.0.0.1:3000/index
app.get('/index', (req, res) => { })
复制代码
// 浏览器地址: http://127.0.0.1:3000/goods/list
app.get('/goods/list', (req, res) => { })
复制代码
sendFile
核心: 使用 sendFile 方法。 该方法是express封装的一个方法,能够直接读取文件内容并返回给浏览器
res.sendFile(var1, var2, var3);
/**
参数1: 要读取的文件路径 --- 必须绝对路径
参数2: 配置项,可选,一般不用
参数3: 读取完成后的回调函数,该函数中有一个参数 --- 错误对象
*/
// 参数2示例:
const config = {
root: __dirname + '/view/', // 配置模板文件跟路径
headers: { // 配置头信息
'content-type':'text/html;charset=utf-8'
}
}
复制代码
目标: 显示view目录下, index.html 和 login.html 两个页面
// 目标:
// 浏览器中输入 http://127.0.0.1:3000/index时,显示 index.html
// 浏览器中输入 http://127.0.0.1:3000/admin/login时, 显示login.html
//1. 加载 express 模块
const express = require('express');
//2. 创建服务器
const app = express();
//3. 启动服务器
app.listen(3000, () => {
console.log('express-server is running...');
});
const path = require('path');
//4. 监听路由
app.get('/index', (req, res) => {
/**
* 功能: 读取指定的文件内容并返回给浏览器进行显示
* 该方法由express提供
* 参数1: 文件路径 --- 必须是绝对路径
* 参数2: 配置项,可选
* 参数3: 读取完成后的回调函数,有一个参数 err
*/
res.sendFile(path.join(__dirname, 'view', 'index.html'), (err) => {
if (err) {
console.log(err);
}
})
})
app.get('/admin/login', (req, res) => {
const obj = {
root: path.join(__dirname, 'view', 'admin')
}
//配置项中 root 就是用来设置文件所处目录的绝对路径的。
//有了参数2之后,参数2和参数1会共同拼接一个绝对路径
res.sendFile('login.html', obj, (err) => {
if (err) {
console.log(err);
}
})
})
复制代码
开放(托管)静态资源
托管css、js、img等文件
app.use('/public', express.static('./public'));
url地址中以 /public 开头的,都会去 public 目录下读取对应的文件并返回给浏览器
复制代码
//目标:页面显示时要加载静态资源 (css、js、img)
//1. 加载 express 模块
const express = require('express');
//2. 创建服务器
const app = express();
//3. 启动服务器
app.listen(3000, () => {
console.log('express-server is running...');
});
const path = require('path');
//托管/开放静态资源
app.use('/public', express.static(path.join(__dirname, 'public')));
//4. 监听浏览器请求
//当url地址为: http://127.0.0.1:3000/list 时,
//进入下面方法来进行处理
app.get('/list', (req, res) => {
res.sendFile(path.join(__dirname, 'view', 'list.html'), (err) => {});
})
复制代码
下一篇讲一下node的模块化和中间件
点赞支持、手留余香、与有荣焉,动动你发财的小手哟,感谢各位大佬能留下您的足迹。
往期精彩推荐
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END