手摸手带你肝nodejs(四)

这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战

Express框架

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服务器步骤:

  1. 加载 express 模块
  2. 创建 express 服务器
  3. 开启服务器
  4. 监听浏览器请求并进行处理
//目标: 创建并启动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');
})
复制代码

总结:

  1. 使用express构造服务器也是4步流程:
① 加载express模块         const  express = require('express');
② 创建express服务器       const  app = express();
③ 开启express服务器       app.listen(3000, () => {})
④ 注册服务器事件           app.get(url, callback)   app.post(url, callback)
复制代码
  1. 注册服务器事件有两个方法: get() 和 post()
get方法用来接收get请求,浏览器地址栏发起的请求都是get请求
​
post方法用来接收post请求,接收post表单提交的请求
复制代码
  1. express框架封装了一些额外的API(例如:send),可以让我们更方便的构造Web服务器
  2. 浏览器请求的每一个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的模块化和中间件

点赞支持、手留余香、与有荣焉,动动你发财的小手哟,感谢各位大佬能留下您的足迹。

往期精彩推荐

前端万字面经——基础篇

前端万字面积——进阶篇

聊一聊前端开发中最常用的两种管理工具

聊聊让人头疼的正则表达式

手摸手带你肝nodejs(一)

获取文件blob流地址实现下载功能

手摸手带你肝 nodejs (二)

git 实现自动推送

手摸手带你肝nodejs(三)

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享