nodejs相关基础知识--第三篇

模块的加载机制

**模块在第一次加载后会被缓存。**多次调用同一个模块,并不会重复执行模块的代码。因此,不论是第三方,自定义还是内置模块,都优先从缓存中读取。

内置模块

由node.js官方提供,加载的优先级最高。比如:require('fs')

自定义模块

require加载自定义模块时,必须指定以./或者../开头的路径标识符,如果没有./或../这样的路径标识符,则node会默认为加载的是内置模块或者第三方模块。

同时,在使用require导入自定义模块时,若省略了文件扩展名,node.js会按照以下顺序分别尝试加载相应的文件。

1、按照确切的文件名加载;

2、若1加载失败,则补全.js扩展名进行加载;

3、若2加载失败,则补全.json扩展名进行加载;

4、若3加载失败,则补全.node扩展名进行加载;

5、若4加载失败,则终端报错,加载失败。

第三方模块

如果传递给require的模块标识符不是内置模块,也没有以./或者../开头,则node.js会从当前模块的父目录开始,尝试从/node_modules文件夹中加载第三方模块。如果没找到对应 的第三方模块,则移动到再上一级的父目录中,进行加载,一直到文件系统的根目录。如下:

目录作为模块

目录作为标识符传递给require进行加载时,有以下三种加载方式

  1. 在被加载的目录下寻找package.json文件,以package.json的main属性值,作为reqiure加载的入口;
  2. 若package.json不存在,或者package.json中的main入口不存在或者main入口无法解析,则node.js会尝试加载目录下的index.js作为入口文件;
  3. 若 上面两步都失败,则终端报错。

express

express简介

express是基于node.js平台,快速、开放、极简的web开发框架。

通俗的理解,express和node.js中内置的http模块类似,是专门用来创建web服务器的。

express本质是一个npm的第三方包。

express官网:Express - 基于 Node.js 平台的 web 应用开发框架 - Express中文文档 | Express中文网

express是基于node.js的http模块封装出来的。

express基本用法

安装

在项目所属根目录运行终端命令

复制代码
npm i express@4.17.1

创建基本的服务器

javascript 复制代码
// 1.导入express
const express=require('express')
// 2.创建web服务器
const app=express()
// 3.调用app.listen(端口号,启动成功后的回调函数),启动服务器
app.listen(80,()=>{
    console.log('express running at 127.0.0.1')
})

监听get请求

javascript 复制代码
// 1.导入express
const express=require('express')
// 2.创建web服务器
const app=express()
 // 3.调用app.listen(端口号,启动成功后的回调函数),启动服务器
app.listen(80,()=>{
    console.log('express running at 127.0.0.1')
})
app.get('/user',(req,res)=>{
    res.send({name:'jack',sex:'nan'})
})

监听post请求

javascript 复制代码
// 1.导入express
const express=require('express')
// 2.创建web服务器
const app=express()
 // 3.调用app.listen(端口号,启动成功后的回调函数),启动服务器
app.listen(80,()=>{
    console.log('express running at 127.0.0.1')
})
app.post('/user',(req,res)=>{
    res.send('请求成功')
})

把内容响应给客户端:res.send

获取url中携带的查询参数:req.query

默认情况下req.query是一个空对象

javascript 复制代码
app.get('/user',(req,res)=>{
    console.log(`output->req`,req.query)
    res.send({name:'jack',sex:'nan'})
})

比如我们请求的接口是http://127.0.0.1/user?id=1

上面的就打印的是 out->req {id:1}

获取url上的动态参数:req.params

req.params默认是一个空对象,里面存放着 通过**:**动态匹配到的参数值

javascript 复制代码
app.post('/level/:id',(req,res)=>{
    console.log(`output->req.params`,req.params)
    res.send({level:1})
})

比如上面接口,我们请求http://127.0.0.1/level/123

上面打印的就是 output->req.params { id: '1' }

express 托管静态资源

代码如下:15_express_static.js

javascript 复制代码
const express=require('express')
const app = express();

app.listen(80,()=>{
    console.log('expres running at 127.0.0.1')
})

app.use(express.static('./clock'))

如上代码,当前js文件同级有一个clock文件夹

clock/index.html内容如下

现在在终端启动15_express_static.js,然后打开浏览器访问:http://127.0.0.1/index.html

访问http://127.0.0.1/index.css,http://127.0.0.1/index.js也会得到相应的内容

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

访问静态资源时,会根据express.static托管顺序查找 对应的文件

挂载路径前缀

nodemon

安装

javascript 复制代码
npm install -g nodemon

使用nodemon

相关推荐
hoLzwEge1 天前
pnpm vs npm:新一代包管理器的范式革命
前端框架·node.js
麻辣凉茶1 天前
给阿嬤一封来自云端的信(上)
前端·node.js
codingWhat2 天前
能效平台设计方案(打通gitlab和飞书)
后端·node.js·koa
见过夏天4 天前
Node.js 常用命令全攻略
node.js
前端双越老师4 天前
我从 0 开发的 AI Agent 智语项目发布了
前端·node.js·agent
kyriewen5 天前
2026 年了,还在用 Node.js?Bun 迁移实战:20 分钟搞定,附踩坑记录
前端·javascript·node.js
donecoding5 天前
3 条命令搞定闭环 Monorepo:Lerna 版本管理 + 拓扑构建 + 自定义分发
前端·前端框架·node.js
Flynt6 天前
npm v12 来了:allowScripts 默认关闭,我的项目差点跑不起来
安全·npm·node.js
叫我Paul就好7 天前
尝试 Node 搭建后端-开发框架
node.js
风止何安啊9 天前
网课倍速痛点解决:一套前端代码实现自由控速播放器
前端·javascript·node.js