nodejs -- 模块的加载机制 express包

优先从缓存中加载

模块在第一次加载后会被缓存 这也意味着多次调用require()不会导致模块代码被执行多次。
注意:
不论是内置模块 用户自定义模块 还是第三方模块 它们都会优先从缓存中加载,从而提高模块的加载效率。

内置模块的加载机制

内置模块是由Nodejs官方提供的模块 内置模块的加载优先级最高。
例如 requier(“fs”)始终返回内置的fs模块 即使在node_modules目录下有名字相同的包页叫做fs

自定义模块的加载自定义模块

使用require()加载自定义模块时,必须指定以./或…/开头的路径标识符 在加载自定义模块时,如果没有指定的./或…/这样的路径标识符 则node会把它当作内置模块或第三方模块进行加载。

同时 在使用require()导入自定义模块时,如果省略了文件的扩展名,则node会按顺序分别尝试加载以下的文件:

1 按照确切的文件名进行加载
2 补全.js扩展名进行加载
3 补全.json扩展名进行加载
4 补全.node扩展名进行加载
5 加载失败 终端报错

第三方模块的加载机制

如果传递给require()的模块标识符不是一个内置模块 也没有以./或…/开头 则nodejs会从当前模块的父目录开始 尝试从/node_modules文件夹中加载第三方模块

如果没找到 则会移动到上层目录 进行加载 直到文件系统的根目录

目录作为模块

当把目录作为模块标识符,传递给require()进行加载的时候 会有三种加载方式
1 在被加载的目录下查找一个叫做package.json的文件 并寻找main属性 作为require()加载的入口
2 如果目录里没有package.json文件或者main入口不存在或无法解析 则nodejs将会试图加载目录下的index.js文件
3 如果以上两步都失败了,则nodejs会在终端打印错误消息,报告模块的缺少:Error:Cannot find module ‘xxx’

初始Express

express简介:
1 什么是Express
官方给出的概念:Express是基于Node.js平台,快速 开放 极简的Web开发框架。

通俗的理解:Express的作用和Node.js内置的http模块类似,是专门用来创建Web服务器的。

2 进一步理解Express
思考:不适用Express能否创建Web服务器?
答案:能,使用Node.js提供的原生http模块即可。

思考:有了http为什么还要有express?
答案:http模块用起来很复杂,开发效率低。express是基于内置的http模块进一步封装起来的,能够极大的提高开发效率。

3 Express能够做什么
对于前端来说,最常见的两种服务器,分别是:
web网站服务器:专门对外提供Web网页资源的服务器
API接口服务器:专门对外提供API接口的服务器

使用Express,我们可以方便 快速的创建Web网站的服务器或API接口的服务器。

Express的基本使用

1 安装
npm insall express@4.17.1

2 创建基本的Web服务器

//1 导入express
const express = require('express')
//2 创建web服务器
const app = express()

//3 调用 app.listen(端口号,启动成功的回调函数),启动服务器
app.listen(80,()=>{
		console.log('express server running at http://127.0.0.1')
})

3 监听GET请求

通过app.get()方法,可以监听客户端的GET请求,具体的语法格式如下:

//参数1 客户端请求的url地址
//参数2 请求对应的处理函数
//req:请求对象(包含了与请求相关的属性与方法)
//res:响应对象(包含了与响应相关的属性与方法)
app.get('请求url',function(req,res)=>{
    //处理函数
})

4 监听POST请求
通过app.post()方法,可以监听客户端的POST请求,具体的语法格式如下:

//参数1 客户端请求的url地址
//参数2 请求对应的处理函数
//req:请求对象(包含了与请求相关的属性与方法)
//res:响应对象(包含了与响应相关的属性与方法)
app.post('请求url',function(req,res)=>{
    //处理函数
})

5 把内容响应给客户端
通过res.send()方法,可以把处理好的内容,发送给客户端:

app.get('/user',(req,res)=>{
    //向客户端发送json对象
    res.send({name:'25',age:'25',gender:'男'})
})

app.post('/user',(req,res)=>{
    //向客户端发送文本内容
    res.send('请求成功')
})

6 获取URL中所携带的查询参数
通过req.query对象,可以访问到客户端通过查询字符串的形式,发送到服务器的参数:


app.get('/',(req,res)=>{
    //req.query默认是一个空对象
    //客户端使用 ?name=zs&age=20这种查询字符串形式,发送到服务端的参数
    //可以通过req.query对象访问到,例如:
    //req.query.name   req.query.age
    console.log(req.query)
})

![在这里插入图片描述](https://img-blog.csdnimg.cn/bee7ffb9c8a14e3b8e2c8851b7766914.png
在这里插入图片描述
在这里插入图片描述

7 获取URL中的动态参数
通过req.params对象,可以访问到URL中,通过 : 匹配到的动态 :
注释:url中:后面的东西是动态参数

//URL地址中,可以通过 :参数名 的形式,匹配动态参数值
app.get('/user/:id', (req, res) => {
    //req.params默认是一个空对象
    //里面存放着通过:动态匹配到的参数值
    console.log(req.params)
})

在这里插入图片描述

在这里插入图片描述
动态参数可以不止一个

//注意:这里的id是一个动态参数
app.get('/user/:id/:name', (req, res) => {
    //req.params是动态匹配的url参数 默认值为空对象
    console.log(req.params)
    res.send(req.params)
})

在这里插入图片描述

express托管静态资源

1 express.static()

express提供了一个非常好的函数,叫做express.static(),通过它,我们可以非常方便的创建一个静态资源服务器,例如,通过如下代码就可以将public目录下的图片 css文件 js文件对外开放访问了:

app.use(express.static('public'))

现在 你就可以访问public目录中的所有文件了:
http://localhost:3000/images/bg.jpg
http://localhost:3000/css/style.css
http://localhost:3000/js/index.js

注意:
Express在指定的静态目录中查找文件,并对外提供资源的访问路径。因此,存放静态文件的目录名不会出现在URL中。

//创建服务器

const express = require("express")

const app = express()


//在这里调用express.static方法快速的对外提供静态资源
app.use(express.static("./demo1"))

//启动服务器
app.listen(500, () => {
    console.log("服务启动在50端口")
})

2 托管多个静态资源
如果要托管多个静态资源目录,就可以多次调用express.static()

app.use(express.static('./public'))
app.use(express.static('./file'))

3 挂载路径前缀
如果希望在托管的静态资源访问路径之前,挂载路径前缀,则可以使用如下方式:

app.use('/public',express.static('public'))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冲鸭嘟嘟可

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值