Nodejs知识点汇总

基础知识点

1

npm包

1. 定义

  • node中有内置模块,自定义模块和第三方模块(包)

1.1 从哪里下包

该网站上搜索自己所需要的包:https://www.npmjs.com/
该服务器上下载自己所需要的:https://registry.npmjs.org/
Node Package Manager(npm) 将包从服务器https://registry.npmjs.org/下载到本地使用

1.2 dependencies & devDependencies

devDependencies:开发时依赖
简写:npm install 包 -D
完整写:npm install 包 --save-dev

1.3 切换npm镜像

在这里插入图片描述
可以通过nrm对下包的镜像源进行管理
在这里插入图片描述

  • 全局包
    在这里插入图片描述
  • 项目包(dependencies & devDependencies)

2. 发布包

step1: 新建itpackage-tooks文件夹,作为包的根目录
step2: 在itpackage-tooks文件夹中,新建如下三个文件:

  • package.json(包管理配置文件)
  • index.js (包的入口文件)
  • README.md(包的说明文档)

step3:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 模块的加载机制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Express

nodejs内置的http模块用起来复杂,开发效率低,express是基于内置的http模块进一步封装出来的,能极大的提升开发效率

// 导入express
const express = require("express");
// 创建web服务器
const app = express();

// 监听客户端的get和post请求,并向客户端响应具体的内容
app.get("/user", (req, res) => {
    // req.query可以获取客户端的请求参数,默认是空对象
    console.log(req.query);
    // express的send方法,既可以响应一个json对象,也可以响应文本
    res.send({ name: "xyy", age: 25 });
});
app.post("/user", (req, res) => {
    res.send("请求成功");
});

// 启动web服务器
app.listen(80, () => {
    console.log("express server running at http://127.0.0.1");
});

在这里插入图片描述
使用:

在这里插入图片描述

在这里插入图片描述

1. express静态资源托管

在这里插入图片描述
向外托管多个文件:先托管的clock文件,后托管的files文件,检索文件的时候,会先从clock文件中查询
在这里插入图片描述
挂载路径前缀
在这里插入图片描述
在这里插入图片描述

2. express路由

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

2.1 路由模块化

在这里插入图片描述
在这里插入图片描述

2.2 为路由模块添加前缀

在这里插入图片描述

3. express中间件

在这里插入图片描述
在这里插入图片描述

  1. 定义中间件时,一定要有next参数,并且对next进行调用。
  2. 使用app.use()将中间件注册为全局生效的中间件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1 express常见中间件

/**
 * express 中常见的中间件用法,分为5大类
 */
 
// 1. 应用级别的中间件
// 2. 路由级别的中间件
// 3. 错误级别的中间件
// 4. Express 内置的中间件
// 5. 第三方的中间件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ps: 错误级别的中间件必须放在所有路由后,这样才能捕捉到所有的错误
在这里插入图片描述
在这里插入图片描述
自定义中间件

// 自定义中间件
const express = require("express");
const app = express();
// 导入node内置模块
const qs = require("querystring");

// 解析表单数据的中间件
app.use((req, res, next) => {
    // 定义中间件具体的业务逻辑
    // 1. str专门用来存储客户端发送过来的请求体数据
    let str = "";
    // 2. 监听 req 的 data 事件
    req.on("data", (chunk) => {
        str += chunk;
    });
    // 3. 监听 req 的 end 事件(请求体发送完毕后自动触发)
    req.on("end", () => {
        // 调用qs.parse()方法,把查询字符串解析为对象
        const body = qs.parse(str);
        // 将解析出的数据对象挂载为req.body
        req.body = body;
        next();
    });
});

app.post("/home", (req, res) => {
    console.log("req.body", req.body);
    res.send("ok");
});

app.listen(80, () => {
    console.log("express is running at http://127.0.0.1");
});

在这里插入图片描述

4.解决跨域

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1. 项目中使用mysql

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

浏览器与node事件循环

https://juejin.cn/post/6844903630038892558 (node eventloop讲的不是很好)
https://juejin.cn/post/7010308647792148511
https://cloud.tencent.com/developer/article/1508127

很多人以为await会一直等待之后的表达式执行完之后才会继续执行后面的代码,实际上await是一个让出线程的标志。await后面的函数会先执行一遍,然后就会跳出整个async函数来执行后面js栈(后面会详述)的代码。等本轮事件循环执行完了之后又会跳回到async函数中等待await

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值