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

相关推荐
木西11 分钟前
Gemini 3 最新版!Node.js 代理调用教程
前端·node.js·gemini
醇氧6 小时前
【teambition 二开】创建计划工时
node.js·teambition
小新1107 小时前
vscode+nodejs+express 搭建一个简单网站
vscode·node.js·express
浩泽学编程8 小时前
内网开发?系统环境变量无权限配置?快速解决使用其他版本node.js
前端·vue.js·vscode·node.js·js
大布布将军9 小时前
⚡部署的通行证:Docker 容器化基础
运维·前端·学习·程序人生·docker·容器·node.js
薛定谔的猫-菜鸟程序员9 小时前
基于Node.js+Pandoc实现Markdown文件无损转换为Word文档的小工具
node.js·word·vim
2501_942818911 天前
AI 多模态全栈项目实战:Vue3 + Node 打造 TTS+ASR 全家桶!
vue.js·人工智能·node.js
前端流一1 天前
[疑难杂症] 浏览器集成 browser-use 踩坑记录
前端·node.js
大布布将军1 天前
⚡后端安全基石:JWT 原理与身份验证实战
前端·javascript·学习·程序人生·安全·node.js·aigc
闲云一鹤1 天前
【工具篇】使用 nvm 进行 node 版本管理
前端·npm·node.js