搜索
首页web前端js教程一文带你深入了解Node.js(图文详解)

本篇文章通过超多代码和图解来带大家深入解析Node.js,主要内容包括模块化处理、包的基本应用、Express、跨域、操作Mysql数据库等,希望对大家有所帮助!

一文带你深入了解Node.js(图文详解)

一、Node.js简介一文带你深入了解Node.js(图文详解)>一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解)什么是Node.js一文带你深入了解Node.js(图文详解)>

Node.js是一个调用内置ApI并且基于Chrome V8引擎的js运行环境,之前自己在本地总结了一些零散的只知识点,今天整合一下发出来。

官网地址: https://nodejs.org/zh-cn/

一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) Node.js可以做什么一文带你深入了解Node.js(图文详解)>

①基于 Express 框架(http://www.expressjs.com.cn/),可以快速构建 Web 应用。【相关教程推荐:nodejs视频教程编程教学

②基于 Electron 框架(https://electronjs.org/),可以构建跨平台的桌面应用

③基于restify框架(http://restify.com/),可以快速构建 API 接口项目

④读写和操作数据库、创建实用的命令行工具辅助前端开发、etc…

一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) Node.js的安装一文带你深入了解Node.js(图文详解)>

下载链接:https://nodejs.org/en/

一文带你深入了解Node.js(图文详解)

  • LTS:长期稳定版
  • Current:尝鲜版

查看版本号:node –v

一文带你深入了解Node.js(图文详解)

学习路线:JavaScript 基础语法 Node.js 内置 API 模块(fs、path、http等) 第三方 API 模块(express、mysql 等)

一文带你深入了解Node.js(图文详解).4 Node.js的使用一文带你深入了解Node.js(图文详解)>

命令:node js文件名

一文带你深入了解Node.js(图文详解)

终端快捷键

①使用 ↑ 键,可以快速定位到上一次执行的命令

②使用 tab 键,能够快速补全路径

③使用 esc 键,能够快速清空当前已输入的命令

④输入 cls 命令,可以清空终端

二、模块化处理一文带你深入了解Node.js(图文详解)>一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) 什么是模块化一文带你深入了解Node.js(图文详解)>

一文带你深入了解Node.js(图文详解)

定义:把复杂问题简单化,分成一个个小问题。编程领域中的模块化,就是遵守固定的规则,把一个大文件拆成独立并互相依赖的多个小模块

把代码进行模块化拆分的好处

  • 提高了代码的复用性
  • 提高了代码的可维护性
  • 可以实现按需加载
一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) 内置模块一文带你深入了解Node.js(图文详解)>

定义:由Node.js官方提供,如fs、http、path

一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) fs文件系统模块

(一文带你深入了解Node.js(图文详解))基本用法
// 引用内部模块
const fs = require(&#一文带你深入了解Node.js(图文详解)9;fs&#一文带你深入了解Node.js(图文详解)9;);

// 文件读取
fs.readFile(&#一文带你深入了解Node.js(图文详解)9;../files/test-fs.txt&#一文带你深入了解Node.js(图文详解)9;, &#一文带你深入了解Node.js(图文详解)9;utf-8&#一文带你深入了解Node.js(图文详解)9;, (err, results) => {
    if (err) return console.log(err.message);// 错误信息err null
    console.log(results);
})

// 文件写入
fs.writeFile(&#一文带你深入了解Node.js(图文详解)9;../files/test-fs.txt&#一文带你深入了解Node.js(图文详解)9;, &#一文带你深入了解Node.js(图文详解)9;Node.js&#一文带你深入了解Node.js(图文详解)9;, &#一文带你深入了解Node.js(图文详解)9;utf-8&#一文带你深入了解Node.js(图文详解)9;, (err) => {
    if (err) return console.log(err.message);
    console.log(&#一文带你深入了解Node.js(图文详解)9;写入文件成功!&#一文带你深入了解Node.js(图文详解)9;);
})

注意点

  • readFile只能读取已经存在的文件
  • writeFile写入内容已经有文件,则创建同名文件,再写入文件
  • readFile需要在writeFile后面读取,不然出错
(一文带你深入了解Node.js(图文详解))防止动态拼接

一文带你深入了解Node.js(图文详解)

  • node 命令自动将当前路径和js脚本文件路径拼接,而不管.day总复习这个路径
  • 我们可以使用绝对路径改善

一文带你深入了解Node.js(图文详解)

(一文带你深入了解Node.js(图文详解))路径问题
  • ./ 表示当前目录 ../ 表示父级目录../..表示祖父目录
  • 动态拼接,首部不能出现./ ../,否则拼接失败 /…/

一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) path内置模块

定义:拼接绝对路径

  • path.join()
  • path.basename()
  • path.extname()
const fs = require(&#一文带你深入了解Node.js(图文详解)9;fs&#一文带你深入了解Node.js(图文详解)9;);

const path = require(&#一文带你深入了解Node.js(图文详解)9;path&#一文带你深入了解Node.js(图文详解)9;);

const fpath = path.join(__dirname, &#一文带你深入了解Node.js(图文详解)9;/../files/test-fs.txt&#一文带你深入了解Node.js(图文详解)9;);

fs.readFile(fpath, &#一文带你深入了解Node.js(图文详解)9;utf-8&#一文带你深入了解Node.js(图文详解)9;, (err, results) => {
    console.log(__dirname);
    console.log(path.basename(fpath, &#一文带你深入了解Node.js(图文详解)9;.txt&#一文带你深入了解Node.js(图文详解)9;));
    console.log(path.extname(fpath));

    if (err) return console.log(err.message);
    console.log(results);
})
// test-fs
// .txt
// Node.js

一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) http内置模块

定义Node.js提供创建web服务器

一文带你深入了解Node.js(图文详解)

(一文带你深入了解Node.js(图文详解)) 初始化
// 导入http模块
const http = require(&#一文带你深入了解Node.js(图文详解)9;http&#一文带你深入了解Node.js(图文详解)9;);

//创建web服务器实例
const server = http.createServer();

//绑定request事件,监听客户端请求
server.on(&#一文带你深入了解Node.js(图文详解)9;request&#一文带你深入了解Node.js(图文详解)9;, (req, res) => {
    let str = `路径 ${req.url} 方法 ${req.method}`;
    console.log(str);
    // 向客户端发送中文前,设置响应头
    res.setHeader(&#一文带你深入了解Node.js(图文详解)9;Content-Type&#一文带你深入了解Node.js(图文详解)9;, &#一文带你深入了解Node.js(图文详解)9;text/html;charset=utf-8&#一文带你深入了解Node.js(图文详解)9;);
    res.end(str);
})


//启动服务器
server.listen(80, () => {
    console.log(&#一文带你深入了解Node.js(图文详解)9;http://一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)7.0.0.一文带你深入了解Node.js(图文详解)&#一文带你深入了解Node.js(图文详解)9;);
})
(一文带你深入了解Node.js(图文详解)) web服务器

一文带你深入了解Node.js(图文详解)

  • 根据浏览器访问的url地址不同,返回相应的绝对路径
const fs = require(&#一文带你深入了解Node.js(图文详解)9;fs&#一文带你深入了解Node.js(图文详解)9;);
const http = require(&#一文带你深入了解Node.js(图文详解)9;http&#一文带你深入了解Node.js(图文详解)9;);
const path = require(&#一文带你深入了解Node.js(图文详解)9;path&#一文带你深入了解Node.js(图文详解)9;);
const server = http.createServer();

let fpath = &#一文带你深入了解Node.js(图文详解)9;&#一文带你深入了解Node.js(图文详解)9;;
server.on(&#一文带你深入了解Node.js(图文详解)9;request&#一文带你深入了解Node.js(图文详解)9;, (req, res) => {
    if (req.url === &#一文带你深入了解Node.js(图文详解)9;/&#一文带你深入了解Node.js(图文详解)9;) {
        fpath = path.join(__dirname + &#一文带你深入了解Node.js(图文详解)9;/../files/clock/index.html&#一文带你深入了解Node.js(图文详解)9;);
        console.log(__dirname);
        console.log(fpath);
    }
    else {
        fpath = path.join(__dirname + &#一文带你深入了解Node.js(图文详解)9;/../files/clock&#一文带你深入了解Node.js(图文详解)9; + req.url);
    }
    fs.readFile(fpath, &#一文带你深入了解Node.js(图文详解)9;utf-8&#一文带你深入了解Node.js(图文详解)9;, (err, results) => {
        if (err) res.end(&#一文带你深入了解Node.js(图文详解)9;404 not find&#一文带你深入了解Node.js(图文详解)9;);
        res.end(results);
    })
})

server.listen(80, () => {
    console.log(&#一文带你深入了解Node.js(图文详解)9;http://一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)7.0.0.一文带你深入了解Node.js(图文详解)&#一文带你深入了解Node.js(图文详解)9;);
})
一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) 自定义模块一文带你深入了解Node.js(图文详解)>

定义:用户自定义的js模块

//引入本地文件
const custom = require(&#一文带你深入了解Node.js(图文详解)9;./0一文带你深入了解Node.js(图文详解)-node.js的使用&#一文带你深入了解Node.js(图文详解)9;);

一文带你深入了解Node.js(图文详解)

注意:自定义模块开头必须有./ …/

一文带你深入了解Node.js(图文详解).4 外部模块一文带你深入了解Node.js(图文详解)>

定义:由第三方提供,使用前需要下载

//下载外部导入
const moment = require(&#一文带你深入了解Node.js(图文详解)9;moment&#一文带你深入了解Node.js(图文详解)9;);

一文带你深入了解Node.js(图文详解)

监听nodemon

npm i nodemon -g

代替node使用nodedmon每次修改内容不需要重启服务器,自动监听

一文带你深入了解Node.js(图文详解).5 模块化处理一文带你深入了解Node.js(图文详解)>

模块作用域定义:和函数一致,当前模块定义的方法、变量,只能在当前模块访问,防止变量污染

一文带你深入了解Node.js(图文详解)

暴露:通过module.exports或者exports暴露出去,使用 require() 方法导入模块时,导入的结果,永远以module.exports 指向的对象为准

一文带你深入了解Node.js(图文详解).6 加载机制一文带你深入了解Node.js(图文详解)>

定义一次加载缓存,从缓存加载 内置模块加载优先级MAX

三、包的基本应用一文带你深入了解Node.js(图文详解)>

:概念像node.js的第三方模块,包是基于内置模块封装出来的,提供了更高级、更方便的 API,极大的提高了开发效率

npm: 包管理工具

一文带你深入了解Node.js(图文详解)

一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) 使用流程一文带你深入了解Node.js(图文详解)>
  • npm安装包
  • js导入包
  • 根据开发文档使用包
// npm i moment
const moment = require(&#一文带你深入了解Node.js(图文详解)9;moment&#一文带你深入了解Node.js(图文详解)9;);
const date = moment().format(&#一文带你深入了解Node.js(图文详解)9;YYYY-MM-DD HH:mm:ss&#一文带你深入了解Node.js(图文详解)9;);
console.log(date);//一文带你深入了解Node.js(图文详解)0一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)-09-一文带你深入了解Node.js(图文详解)0 一文带你深入了解Node.js(图文详解)0:4一文带你深入了解Node.js(图文详解):一文带你深入了解Node.js(图文详解)4
一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) 版本问题一文带你深入了解Node.js(图文详解)>

包的版本号是以“点分十进制”形式进行定义的,总共有三位数字,例如 一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解)4.0
其中每一位数字所代表的的含义如下:

  • 第一文带你深入了解Node.js(图文详解)位数字:大版本

  • 第一文带你深入了解Node.js(图文详解)位数字:功能版本

  • 第一文带你深入了解Node.js(图文详解)位数字:Bug修复版本

    版本号提升的规则:只要前面的版本号增长了,则后面的版本号归零。

npm i comment@一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解)
一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) 参数问题一文带你深入了解Node.js(图文详解)>

一文带你深入了解Node.js(图文详解)

  • node_modules 文件夹用来存放所有已安装到项目中的包。require() 导入第三方包时,就是从这个目录中查找并加载包。
  • package-lock.json 配置文件用来记录 node_modules 目录下的每一个包的下载信息,例如包的名字、版本号、下载地址等。
  • package.json项目的名称、版本号、描述等、用到了哪些包、开发期间使用的包、部署使用的包
    • devDependencies :开发依赖
    • dependencies :核心依赖
  • 注意:程序员不要手动修改 node_modules 或 package-lock.json 文件中的任何代码,npm 包管理工具会自动维护它们,今后在项目开发中,一定要把 node_modules 文件夹,添加到 .gitignore 忽略文件中
一文带你深入了解Node.js(图文详解).4 npm命令一文带你深入了解Node.js(图文详解)>
//安装包 
npm i moment
//安装全局包
npm i 包名 -g
//安装包到开发阶段到devDependencies
npm i 包名 -D
//安装所有依赖包 
npm install
//卸载包 
npm uninstall moment
//查看已经安装的局部包
npm ls
//查看全局安装的包
npm ls -g

查看包命令:https://blog.csdn.net/qq_4一文带你深入了解Node.js(图文详解)664096/article/details/一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)797一文带你深入了解Node.js(图文详解)60

一文带你深入了解Node.js(图文详解).5 下载镜像一文带你深入了解Node.js(图文详解)>

一文带你深入了解Node.js(图文详解)

//查看当前npm镜像
npm config get registry
//nrm镜像工具,安装为全局镜像
nrm ls
//切换镜像
nrm use taobao

一文带你深入了解Node.js(图文详解)

一文带你深入了解Node.js(图文详解).6 开发自己的包一文带你深入了解Node.js(图文详解)>

一个规范的包,它的组成结构,必须符合以下 一文带你深入了解Node.js(图文详解) 点要求:

  • 包必须以单独的目录而存在
  • 包的顶级目录下要必须包含 package.json 这个包管理配置文件
  • package.json 中必须包含 name,version,main 这三个属性,分别代表包的名字、版本号、包的入口

一文带你深入了解Node.js(图文详解)

发布包到npm

  • 镜像切换到npm上
  • npm login登录
  • 发布包 npm publish
  • 删除包 npm unpublish 包名 --force

资源

  • https://www.npmjs.com/ 网站上搜索自己所需要的包
  • https://registry.npmjs.org/ 服务器上下载自己需要的包
四、Express一文带你深入了解Node.js(图文详解)>4.一文带你深入了解Node.js(图文详解) 简介一文带你深入了解Node.js(图文详解)>

Express:基于Node.js http进一步封装,更加高级的Web开发框架

对于前端程序员来说,最常见的两种服务器,分别是:

  • Web 网站服务器:专门对外提供 Web 网页资源的服务器
  • API 接口服务器:专门对外提供 API 接口的服务器
4.一文带你深入了解Node.js(图文详解) 基本使用一文带你深入了解Node.js(图文详解)>
//导入包
const express = require(&#一文带你深入了解Node.js(图文详解)9;express&#一文带你深入了解Node.js(图文详解)9;);
//创建服务器
const app = express();

app.get(&#一文带你深入了解Node.js(图文详解)9;/user&#一文带你深入了解Node.js(图文详解)9;, (req, res) => {
    res.send({ 男: &#一文带你深入了解Node.js(图文详解)9;一文带你深入了解Node.js(图文详解)8&#一文带你深入了解Node.js(图文详解)9;, age: 一文带你深入了解Node.js(图文详解)8 });
})

app.post(&#一文带你深入了解Node.js(图文详解)9;/user&#一文带你深入了解Node.js(图文详解)9;, (req, res) => {
    res.send(&#一文带你深入了解Node.js(图文详解)9;post请求&#一文带你深入了解Node.js(图文详解)9;);
})

app.get(&#一文带你深入了解Node.js(图文详解)9;/&#一文带你深入了解Node.js(图文详解)9;, (req, res) => {
    //req.query  ?name=zs&age=一文带你深入了解Node.js(图文详解)8  这种数据
    //http://一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)7.0.0.一文带你深入了解Node.js(图文详解)?name=zs&age=一文带你深入了解Node.js(图文详解)8
    console.log(req.query);
})
app.post(&#一文带你深入了解Node.js(图文详解)9;/:id&#一文带你深入了解Node.js(图文详解)9;, (req, res) => {
    //动态匹配参数
    console.log(req.params);
})

//启动服务器
app.listen(80, () => {
    console.log(&#一文带你深入了解Node.js(图文详解)9;http://一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)7.0.0.一文带你深入了解Node.js(图文详解)&#一文带你深入了解Node.js(图文详解)9;);
})
4.一文带你深入了解Node.js(图文详解) 托管静态资源一文带你深入了解Node.js(图文详解)>

定义通过路径暴露文件,省去文件路径的描写

const express = require(&#一文带你深入了解Node.js(图文详解)9;express&#一文带你深入了解Node.js(图文详解)9;);

const app = express();

//托管静态资源,不需要访问
app.use(&#一文带你深入了解Node.js(图文详解)9;/public&#一文带你深入了解Node.js(图文详解)9;, express.static(&#一文带你深入了解Node.js(图文详解)9;../files/clock&#一文带你深入了解Node.js(图文详解)9;));

app.listen(80, () => {
    console.log(&#一文带你深入了解Node.js(图文详解)9;http://一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)7.0.0.一文带你深入了解Node.js(图文详解)&#一文带你深入了解Node.js(图文详解)9;);
})

推荐VScode插件:postcode

Express 的中文官网: http://www.expressjs.com.cn/

4.4 路由一文带你深入了解Node.js(图文详解)>

一文带你深入了解Node.js(图文详解)

定义:客户端与服务器映射关系

一文带你深入了解Node.js(图文详解)

4.4.一文带你深入了解Node.js(图文详解) 简单挂载

//导入包
const express = require(&#一文带你深入了解Node.js(图文详解)9;express&#一文带你深入了解Node.js(图文详解)9;);
//创建服务器
const app = express();

app.get(&#一文带你深入了解Node.js(图文详解)9;/user&#一文带你深入了解Node.js(图文详解)9;, (req, res) => {
    res.send({ 男: &#一文带你深入了解Node.js(图文详解)9;一文带你深入了解Node.js(图文详解)8&#一文带你深入了解Node.js(图文详解)9;, age: 一文带你深入了解Node.js(图文详解)8 });
})

app.post(&#一文带你深入了解Node.js(图文详解)9;/user&#一文带你深入了解Node.js(图文详解)9;, (req, res) => {
    res.send(&#一文带你深入了解Node.js(图文详解)9;post请求&#一文带你深入了解Node.js(图文详解)9;);
})
//启动服务器
app.listen(80, () => {
    console.log(&#一文带你深入了解Node.js(图文详解)9;http://一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)7.0.0.一文带你深入了解Node.js(图文详解)&#一文带你深入了解Node.js(图文详解)9;);
})

4.4.一文带你深入了解Node.js(图文详解) 模块化路由

为了方便对路由进行模块化的管理,Express 不建议将路由直接挂载到 app 上,而是推荐将路由抽离为单独的模块

将路由抽离为单独模块的步骤如下:

  • 创建路由模块对应的 .js 文件

  • 调用express.Router()函数创建路由对象

  • 向路由对象上挂载具体的路由

  • 使用 module.exports 向外共享路由对象

  • 使用app.use()函数注册路由模块

创建路由对象

const express = require(&#一文带你深入了解Node.js(图文详解)9;express&#一文带你深入了解Node.js(图文详解)9;);//导入包

const router = express.Router();//创建路由对象

//绑定路由规则
router.get(&#一文带你深入了解Node.js(图文详解)9;/user/list&#一文带你深入了解Node.js(图文详解)9;, (req, res) => {
    res.send(&#一文带你深入了解Node.js(图文详解)9;user list message&#一文带你深入了解Node.js(图文详解)9;);
})

router.post(&#一文带你深入了解Node.js(图文详解)9;/user/add&#一文带你深入了解Node.js(图文详解)9;, (req, res) => {
    res.send(&#一文带你深入了解Node.js(图文详解)9;user add message&#一文带你深入了解Node.js(图文详解)9;);
})

//向外导出路由对象
module.exports = router;

使用路由对象

const express = require(&#一文带你深入了解Node.js(图文详解)9;express&#一文带你深入了解Node.js(图文详解)9;);
const app = express();

const router = require(&#一文带你深入了解Node.js(图文详解)9;./一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)-模块化路由&#一文带你深入了解Node.js(图文详解)9;);

app.use(router);

app.listen(80, () => {
    console.log(&#一文带你深入了解Node.js(图文详解)9;http://一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)7.0.0.一文带你深入了解Node.js(图文详解)&#一文带你深入了解Node.js(图文详解)9;);
})
4.5 中间件一文带你深入了解Node.js(图文详解)>

一文带你深入了解Node.js(图文详解)

一文带你深入了解Node.js(图文详解)

中间件:与路由处理函数不同,必须包含next参数

4.5.一文带你深入了解Node.js(图文详解) 基本使用

const express = require(&#一文带你深入了解Node.js(图文详解)9;express&#一文带你深入了解Node.js(图文详解)9;);
const app = express();
//全局中间件的简化形式
app.use((req, res, next) => {
    console.log(&#一文带你深入了解Node.js(图文详解)9;正在使用全局中间件&#一文带你深入了解Node.js(图文详解)9;);
    next();
});

app.get(&#一文带你深入了解Node.js(图文详解)9;/&#一文带你深入了解Node.js(图文详解)9;,(req, res) => {
    res.send(&#一文带你深入了解Node.js(图文详解)9;Get message&#一文带你深入了解Node.js(图文详解)9;);
})


app.listen(80, () => {
    console.log(&#一文带你深入了解Node.js(图文详解)9;http://一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)7.0.0.一文带你深入了解Node.js(图文详解)&#一文带你深入了解Node.js(图文详解)9;);
})

注意

  • 多个中间件共享req,res,上游设置好,下游的中间件/路由使用

  • 中间件定义先后顺序执行

  • 局部生效的中间件,定义在

    • app.get(&#一文带你深入了解Node.js(图文详解)9;/&#一文带你深入了解Node.js(图文详解)9;,中间件,(req, res) => {
          res.send(&#一文带你深入了解Node.js(图文详解)9;Get message&#一文带你深入了解Node.js(图文详解)9;);
      })
    • 一文带你深入了解Node.js(图文详解)

  • 路由之前调用中间件

  • next()函数不能忘,后面不用写内容

4.5.一文带你深入了解Node.js(图文详解) 中间件分类

(一文带你深入了解Node.js(图文详解))应用
const express = require(&#一文带你深入了解Node.js(图文详解)9;express&#一文带你深入了解Node.js(图文详解)9;);
const app = express();

//全局中间件
app.use((req, res, next) => {
    console.log(&#一文带你深入了解Node.js(图文详解)9;全局中间件&#一文带你深入了解Node.js(图文详解)9;);
    next();
})
//局部中间件
function mw(req, res, next) {
    console.log(&#一文带你深入了解Node.js(图文详解)9;局部中间件&#一文带你深入了解Node.js(图文详解)9;);
    next();
}

app.get(&#一文带你深入了解Node.js(图文详解)9;/&#一文带你深入了解Node.js(图文详解)9;, mw, (req, res) => {
    res.send(&#一文带你深入了解Node.js(图文详解)9;server is visting&#一文带你深入了解Node.js(图文详解)9;);
})
app.listen(80, () => {
    console.log(&#一文带你深入了解Node.js(图文详解)9;http://一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)7.0.0.一文带你深入了解Node.js(图文详解)&#一文带你深入了解Node.js(图文详解)9;);
})
(一文带你深入了解Node.js(图文详解))路由

定义:绑定到 express.Router() 实例上的中间件

(一文带你深入了解Node.js(图文详解))错误

定义捕获项目错误,防止出错,在所有路由之后定义

const express = require(&#一文带你深入了解Node.js(图文详解)9;express&#一文带你深入了解Node.js(图文详解)9;);
const app = express();


app.get(&#一文带你深入了解Node.js(图文详解)9;/&#一文带你深入了解Node.js(图文详解)9;, (req, res) => {
    throw new Error(&#一文带你深入了解Node.js(图文详解)9;服务器出错&#一文带你深入了解Node.js(图文详解)9;);
    res.send(&#一文带你深入了解Node.js(图文详解)9;server is visting&#一文带你深入了解Node.js(图文详解)9;);
})


//全局中间件
app.use((err, req, res, next) => {
    console.log(&#一文带你深入了解Node.js(图文详解)9;Error!&#一文带你深入了解Node.js(图文详解)9; + err.message);
    res.send(&#一文带你深入了解Node.js(图文详解)9;Error!&#一文带你深入了解Node.js(图文详解)9; + err.message);
    next();
})

app.listen(80, () => {
    console.log(&#一文带你深入了解Node.js(图文详解)9;http://一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)7.0.0.一文带你深入了解Node.js(图文详解)&#一文带你深入了解Node.js(图文详解)9;);
})
//Error!服务器出错
(4)Express 内置

一文带你深入了解Node.js(图文详解)

const express = require(&#一文带你深入了解Node.js(图文详解)9;express&#一文带你深入了解Node.js(图文详解)9;);
const app = express();

// express.json()解析JSON请求体
app.use(express.json());

//解析application/x-www-
app.use(express.urlencoded({ extended: false }));

app.post(&#一文带你深入了解Node.js(图文详解)9;/user&#一文带你深入了解Node.js(图文详解)9;, (req, res) => {
    console.log(req.body);
})

app.post(&#一文带你深入了解Node.js(图文详解)9;/book&#一文带你深入了解Node.js(图文详解)9;, (req, res) => {
    console.log(req.body);
})

app.listen(80, () => {
    console.log(&#一文带你深入了解Node.js(图文详解)9;http://一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)7.0.0.一文带你深入了解Node.js(图文详解)&#一文带你深入了解Node.js(图文详解)9;);
})
// http://一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)7.0.0.一文带你深入了解Node.js(图文详解)
// { name: &#一文带你深入了解Node.js(图文详解)9;zs&#一文带你深入了解Node.js(图文详解)9;, age: 一文带你深入了解Node.js(图文详解)8 }
// [Object: null prototype] { name: &#一文带你深入了解Node.js(图文详解)9;西游记&#一文带你深入了解Node.js(图文详解)9; }
(5)第三方
  • npm install body-parse
  • require导入
  • app.use()为全局
const express = require(&#一文带你深入了解Node.js(图文详解)9;express&#一文带你深入了解Node.js(图文详解)9;);
const app = express();

const parser = require(&#一文带你深入了解Node.js(图文详解)9;body-parser&#一文带你深入了解Node.js(图文详解)9;);

app.use(parser.urlencoded({ extended: false }));

app.post(&#一文带你深入了解Node.js(图文详解)9;/book&#一文带你深入了解Node.js(图文详解)9;, (req, res) => {
    console.log(req.body);
})

app.listen(80, () => {
    console.log(&#一文带你深入了解Node.js(图文详解)9;http://一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)7.0.0.一文带你深入了解Node.js(图文详解)&#一文带你深入了解Node.js(图文详解)9;);
})

注意:Express 内置的 express.urlencoded 中间件,就是基于 body-parser 这个第三方中间件进一步封装出来的。

4.6 自定义中间件一文带你深入了解Node.js(图文详解)>

封装中间件

const querystring = require(&#一文带你深入了解Node.js(图文详解)9;querystring&#一文带你深入了解Node.js(图文详解)9;);

function parsebody(req, res, next) {
    let str = &#一文带你深入了解Node.js(图文详解)9;&#一文带你深入了解Node.js(图文详解)9;;
    req.on(&#一文带你深入了解Node.js(图文详解)9;data&#一文带你深入了解Node.js(图文详解)9;, (result) => {
        str += result;
    })
    req.on(&#一文带你深入了解Node.js(图文详解)9;end&#一文带你深入了解Node.js(图文详解)9;, () => {
        const body = querystring.parse(str);
        req.body = body;
        next();
    })
}

module.exports = parsebody;

测试中间件

const express = require(&#一文带你深入了解Node.js(图文详解)9;express&#一文带你深入了解Node.js(图文详解)9;);
const app = express();
const parsebody = require(&#一文带你深入了解Node.js(图文详解)9;./一文带你深入了解Node.js(图文详解)4-自定义中间件&#一文带你深入了解Node.js(图文详解)9;);

app.use(parsebody);

app.post(&#一文带你深入了解Node.js(图文详解)9;/user&#一文带你深入了解Node.js(图文详解)9;, (req, res) => {
    res.send(req.body);
    console.log(req.body);

})

app.listen(80, () => {
    console.log(&#一文带你深入了解Node.js(图文详解)9;http://一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)7.0.0.一文带你深入了解Node.js(图文详解)&#一文带你深入了解Node.js(图文详解)9;);
})
4.7 接口一文带你深入了解Node.js(图文详解)>
const express = require(&#一文带你深入了解Node.js(图文详解)9;express&#一文带你深入了解Node.js(图文详解)9;);
const app = express();

const router = require(&#一文带你深入了解Node.js(图文详解)9;./一文带你深入了解Node.js(图文详解)5-接口问题&#一文带你深入了解Node.js(图文详解)9;);
app.use(router);

app.listen(80, () => {
    console.log(&#一文带你深入了解Node.js(图文详解)9;http://一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)7.0.0.一文带你深入了解Node.js(图文详解)&#一文带你深入了解Node.js(图文详解)9;);
})

4.7.一文带你深入了解Node.js(图文详解) GET接口

const express = require(&#一文带你深入了解Node.js(图文详解)9;express&#一文带你深入了解Node.js(图文详解)9;);

const apiRouter = express.Router();

apiRouter.get(&#一文带你深入了解Node.js(图文详解)9;/user&#一文带你深入了解Node.js(图文详解)9;, (req, res) => {
    const query = req.query;
    res.send({
        status: 0,
        msg: &#一文带你深入了解Node.js(图文详解)9;GET 请求成功&#一文带你深入了解Node.js(图文详解)9;,
        data: query
    });
})
module.exports = apiRouter;

4.7.一文带你深入了解Node.js(图文详解) POST接口

apiRouter.use(express.urlencoded({ extended: false }));

apiRouter.post(&#一文带你深入了解Node.js(图文详解)9;/user&#一文带你深入了解Node.js(图文详解)9;, (req, res) => {
    const body = req.body;
    res.send({
        status: 0,
        msg: &#一文带你深入了解Node.js(图文详解)9;POST 请求成功&#一文带你深入了解Node.js(图文详解)9;,
        data: body
    });
})

4.7.一文带你深入了解Node.js(图文详解) PUT接口

4.7.4 DELETE接口

4.7.5 区别

https://blog.csdn.net/qq_4一文带你深入了解Node.js(图文详解)9一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)85/article/details/一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)985一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)94

https://zhuanlan.zhihu.com/p/一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)5454697

五、跨域一文带你深入了解Node.js(图文详解)>5.一文带你深入了解Node.js(图文详解) CORS一文带你深入了解Node.js(图文详解)>

5.一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) 原理

概念:由Http响应头构成,决定浏览器是否阻止js代码获取资源,在服务器端配置

一文带你深入了解Node.js(图文详解)

5.一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) 响应头

一文带你深入了解Node.js(图文详解)

//只允许特定的域名访问、*代表全部
    res.setHeader(&#一文带你深入了解Node.js(图文详解)9;Access-Control-Allow-Origin&#一文带你深入了解Node.js(图文详解)9;, &#一文带你深入了解Node.js(图文详解)9;http://www.baidu.com&#一文带你深入了解Node.js(图文详解)9;);
//配置请求头信息
    res.setHeader(&#一文带你深入了解Node.js(图文详解)9;Access-Control-Allow-Headers&#一文带你深入了解Node.js(图文详解)9;, &#一文带你深入了解Node.js(图文详解)9;Content-Type,X-Custom-Header&#一文带你深入了解Node.js(图文详解)9;);
//配置请求头方法 * 代表全部
    res.setHeader(&#一文带你深入了解Node.js(图文详解)9;Access-Control-Allow-Methods&#一文带你深入了解Node.js(图文详解)9;, &#一文带你深入了解Node.js(图文详解)9;GET,POST,DELETE,PUT&#一文带你深入了解Node.js(图文详解)9;);

5.一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) 分类

(一文带你深入了解Node.js(图文详解))简单请求
  • 请求方式:GET、POST、HEAD
  • HTTP 头部信息不超过以下几种字段无自定义头部字段、Accept、Accept-Language、Content-Language、DPR、Downlink、Save-Data、Viewport-Width、Width 、Content-Type(只有三个值application/x-www-form-urlencoded、multipart/form-data、text/plain)
  • 客户端与服务器只发送一次请求
(一文带你深入了解Node.js(图文详解))预检请求
  • 请求方式:GET、POST、HEAD之外的方式
  • 自定义头部字段
  • OPTION预检,成功后发送带有数据的请求
5.一文带你深入了解Node.js(图文详解) JSONP一文带你深入了解Node.js(图文详解)>

概念:只支持GET请求

六、Mysql数据库一文带你深入了解Node.js(图文详解)>

定义组织存储管理数据仓库

6.一文带你深入了解Node.js(图文详解) SQL命令一文带你深入了解Node.js(图文详解)>

6.一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) 查询

select * from userswhere id>一文带你深入了解Node.js(图文详解) and id <h4>
<a id="6一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)__89一文带你深入了解Node.js(图文详解)"></a>6.一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) 插入</h4><pre class="brush:php;toolbar:false">insert into users(username,password) values(一文带你深入了解Node.js(图文详解)9;jack一文带你深入了解Node.js(图文详解)9;,一文带你深入了解Node.js(图文详解)9;666一文带你深入了解Node.js(图文详解)9;)

6.一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) 更新

update users set password=一文带你深入了解Node.js(图文详解)9;666666一文带你深入了解Node.js(图文详解)9;where username=一文带你深入了解Node.js(图文详解)9;jack一文带你深入了解Node.js(图文详解)9;

6.一文带你深入了解Node.js(图文详解).4 删除

delete from users
where id=9
6.一文带你深入了解Node.js(图文详解) Node.js使用一文带你深入了解Node.js(图文详解)>

6.一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) 初始化

  • 导包:npm i mysql
//引入mysql
const mysql = require(&#一文带你深入了解Node.js(图文详解)9;mysql&#一文带你深入了解Node.js(图文详解)9;);
//建立数据库连接
const db = mysql.createPool({
    url: &#一文带你深入了解Node.js(图文详解)9;一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)7.0.0.一文带你深入了解Node.js(图文详解)&#一文带你深入了解Node.js(图文详解)9;,//数据库IP地址
    user: &#一文带你深入了解Node.js(图文详解)9;root&#一文带你深入了解Node.js(图文详解)9;,//账号
    password: &#一文带你深入了解Node.js(图文详解)9;一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)456&#一文带你深入了解Node.js(图文详解)9;,//密码
    database: &#一文带你深入了解Node.js(图文详解)9;test_db&#一文带你深入了解Node.js(图文详解)9;//操作哪一个数据库
});

6.一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) 查询

const queryStr = &#一文带你深入了解Node.js(图文详解)9;select * from users&#一文带你深入了解Node.js(图文详解)9;;
db.query(queryStr, (err, results) => {
    if (err) return console.log(err.message);
    console.log(results);
})

PS E:\FED\js\node.js\node.js—资料\day总复习\code> node .\一文带你深入了解Node.js(图文详解)8-mysql操作.js
[
  RowDataPacket { id: 一文带你深入了解Node.js(图文详解), username: &#一文带你深入了解Node.js(图文详解)9;zz&#一文带你深入了解Node.js(图文详解)9;, password: &#一文带你深入了解Node.js(图文详解)9;一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)&#一文带你深入了解Node.js(图文详解)9;, status: 0 },
  RowDataPacket { id: 一文带你深入了解Node.js(图文详解), username: &#一文带你深入了解Node.js(图文详解)9;ls&#一文带你深入了解Node.js(图文详解)9;, password: &#一文带你深入了解Node.js(图文详解)9;abc&#一文带你深入了解Node.js(图文详解)9;, status: 0 },
  RowDataPacket { id: 4, username: &#一文带你深入了解Node.js(图文详解)9;jony&#一文带你深入了解Node.js(图文详解)9;, password: &#一文带你深入了解Node.js(图文详解)9;456&#一文带你深入了解Node.js(图文详解)9;, status: 0 }
]

6.一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) 插入

const user = { username: &#一文带你深入了解Node.js(图文详解)9;superman&#一文带你深入了解Node.js(图文详解)9;, password: &#一文带你深入了解Node.js(图文详解)9;jknad&#一文带你深入了解Node.js(图文详解)9; };
const insertStr = &#一文带你深入了解Node.js(图文详解)9;insert into users set ?&#一文带你深入了解Node.js(图文详解)9;;
db.query(insertStr, user, (err, results) => {
    if (err) return console.log(err.message);
    if (results.affectedRows == 一文带你深入了解Node.js(图文详解)) {
        console.log(&#一文带你深入了解Node.js(图文详解)9;插入数据成功&#一文带你深入了解Node.js(图文详解)9;);
    }
})
//插入数据成功

6.一文带你深入了解Node.js(图文详解).4 更新

const user = { id: 一文带你深入了解Node.js(图文详解)0, username: &#一文带你深入了解Node.js(图文详解)9;super&#一文带你深入了解Node.js(图文详解)9;, password: &#一文带你深入了解Node.js(图文详解)9;一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)一文带你深入了解Node.js(图文详解)456&#一文带你深入了解Node.js(图文详解)9; };
const updateStr = &#一文带你深入了解Node.js(图文详解)9;update users set ? where id=?&#一文带你深入了解Node.js(图文详解)9;;
db.query(updateStr, [user, user.id], (err, results) => {
    if (err) return console.log(err.message);
    if (results.affectedRows == 一文带你深入了解Node.js(图文详解)) {
        console.log(&#一文带你深入了解Node.js(图文详解)9;更新数据成功&#一文带你深入了解Node.js(图文详解)9;);
    }
})

6.一文带你深入了解Node.js(图文详解).5 删除

(一文带你深入了解Node.js(图文详解)) 一般删除
const deleteStr = &#一文带你深入了解Node.js(图文详解)9;delete from users where id=?&#一文带你深入了解Node.js(图文详解)9;;
db.query(deleteStr, 一文带你深入了解Node.js(图文详解)0, (err, results) => {
    if (err) return console.log(err.message);
    if (results.affectedRows == 一文带你深入了解Node.js(图文详解)) {
        console.log(&#一文带你深入了解Node.js(图文详解)9;删除成功&#一文带你深入了解Node.js(图文详解)9;);
    }
})
(一文带你深入了解Node.js(图文详解)) 标记删除
const deleteStr = &#一文带你深入了解Node.js(图文详解)9;update users set status=一文带你深入了解Node.js(图文详解) where id=?&#一文带你深入了解Node.js(图文详解)9;;
db.query(deleteStr, 一文带你深入了解Node.js(图文详解)0, (err, results) => {
    if (err) return console.log(err.message);
    if (results.affectedRows == 一文带你深入了解Node.js(图文详解)) {
        console.log(&#一文带你深入了解Node.js(图文详解)9;删除成功&#一文带你深入了解Node.js(图文详解)9;);
    }
})
七、前后端的身份认证一文带你深入了解Node.js(图文详解)>7.一文带你深入了解Node.js(图文详解) Web开发模式一文带你深入了解Node.js(图文详解)>

7.一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) 基于服务端渲染的传统 Web 开发模式

概念:服务端在后台拼接html页面,发送给客户端,不需要ajax

特点

  • 前端耗时少
  • 有利于SEO
  • 占用服务端资源
  • 不利于前后端分离开发

7.一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) 基于前后端分离的新型 Web 开发模式

概念:后端提供API接口,前端通过ajax调用接口

特点

  • 开发体验好
  • 用户体验好
  • 减轻服务器渲染压力
  • 不利于SEO

不谈业务场景而盲目选择使用何种开发模式都是耍流氓

  • 比如企业级网站,主要功能是展示而没有复杂的交互,并且需要良好的 SEO,则这时我们就需要使用服务器端渲染
  • 而类似后台管理项目交互性比较强,不需要考虑 SEO,那么就可以使用前后端分离的开发模式
  • 另外,具体使用何种开发模式并不是绝对的,为了同时兼顾了首页的渲染速度和前后端分离的开发效率,一些网站采用了首屏服务器端渲染 其他页面前后端分离的开发模式
7.一文带你深入了解Node.js(图文详解) 身份认证一文带你深入了解Node.js(图文详解)>

概念:通过不同的手段(验证码、密码、人脸、指纹...),认证客户的身份

一文带你深入了解Node.js(图文详解)

7.一文带你深入了解Node.js(图文详解) Session认证机制一文带你深入了解Node.js(图文详解)>

一文带你深入了解Node.js(图文详解)

Cookie:存储在浏览器不超过4KB字符串,键值对形式存储

  • 自动发送
  • 域名独立
  • 过期时限
  • 4KB限制
  • 容易伪造,不建议存放隐私数据

一文带你深入了解Node.js(图文详解)

7.一文带你深入了解Node.js(图文详解).一文带你深入了解Node.js(图文详解) Session

核心会员卡 pos机认证

一文带你深入了解Node.js(图文详解)

  • npm install express-session

更多node相关知识,请访问:nodejs 教程

以上是一文带你深入了解Node.js(图文详解)的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:csdn。如有侵权,请联系admin@php.cn删除
Python vs. JavaScript:开发人员的比较分析Python vs. JavaScript:开发人员的比较分析May 09, 2025 am 12:22 AM

Python和JavaScript的主要区别在于类型系统和应用场景。1.Python使用动态类型,适合科学计算和数据分析。2.JavaScript采用弱类型,广泛用于前端和全栈开发。两者在异步编程和性能优化上各有优势,选择时应根据项目需求决定。

Python vs. JavaScript:选择合适的工具Python vs. JavaScript:选择合适的工具May 08, 2025 am 12:10 AM

选择Python还是JavaScript取决于项目类型:1)数据科学和自动化任务选择Python;2)前端和全栈开发选择JavaScript。Python因其在数据处理和自动化方面的强大库而备受青睐,而JavaScript则因其在网页交互和全栈开发中的优势而不可或缺。

Python和JavaScript:了解每个的优势Python和JavaScript:了解每个的优势May 06, 2025 am 12:15 AM

Python和JavaScript各有优势,选择取决于项目需求和个人偏好。1.Python易学,语法简洁,适用于数据科学和后端开发,但执行速度较慢。2.JavaScript在前端开发中无处不在,异步编程能力强,Node.js使其适用于全栈开发,但语法可能复杂且易出错。

JavaScript的核心:它是在C还是C上构建的?JavaScript的核心:它是在C还是C上构建的?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc; saninterpretedlanguagethatrunsonenginesoftenwritteninc.1)javascriptwasdesignedAsalightweight,解释edganguageforwebbrowsers.2)Enginesevolvedfromsimpleterterterpretpreterterterpretertestojitcompilerers,典型地提示。

JavaScript应用程序:从前端到后端JavaScript应用程序:从前端到后端May 04, 2025 am 12:12 AM

JavaScript可用于前端和后端开发。前端通过DOM操作增强用户体验,后端通过Node.js处理服务器任务。1.前端示例:改变网页文本内容。2.后端示例:创建Node.js服务器。

Python vs. JavaScript:您应该学到哪种语言?Python vs. JavaScript:您应该学到哪种语言?May 03, 2025 am 12:10 AM

选择Python还是JavaScript应基于职业发展、学习曲线和生态系统:1)职业发展:Python适合数据科学和后端开发,JavaScript适合前端和全栈开发。2)学习曲线:Python语法简洁,适合初学者;JavaScript语法灵活。3)生态系统:Python有丰富的科学计算库,JavaScript有强大的前端框架。

JavaScript框架:为现代网络开发提供动力JavaScript框架:为现代网络开发提供动力May 02, 2025 am 12:04 AM

JavaScript框架的强大之处在于简化开发、提升用户体验和应用性能。选择框架时应考虑:1.项目规模和复杂度,2.团队经验,3.生态系统和社区支持。

JavaScript,C和浏览器之间的关系JavaScript,C和浏览器之间的关系May 01, 2025 am 12:06 AM

引言我知道你可能会觉得奇怪,JavaScript、C 和浏览器之间到底有什么关系?它们之间看似毫无关联,但实际上,它们在现代网络开发中扮演着非常重要的角色。今天我们就来深入探讨一下这三者之间的紧密联系。通过这篇文章,你将了解到JavaScript如何在浏览器中运行,C 在浏览器引擎中的作用,以及它们如何共同推动网页的渲染和交互。JavaScript与浏览器的关系我们都知道,JavaScript是前端开发的核心语言,它直接在浏览器中运行,让网页变得生动有趣。你是否曾经想过,为什么JavaScr

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中