本篇文章通过超多代码和图解来带大家深入解析Node.js,主要内容包括模块化处理、包的基本应用、Express、跨域、操作Mysql数据库等,希望对大家有所帮助!
Node.js
是一个调用内置ApI
并且基于Chrome V8
引擎的js运行环境,之前自己在本地总结了一些零散的只知识点,今天整合一下发出来。
官网地址: https://nodejs.org/zh-cn/
①基于 Express
框架(http://www.expressjs.com.cn/),可以快速构建 Web 应用。【相关教程推荐:nodejs视频教程、编程教学】
②基于 Electron
框架(https://electronjs.org/),可以构建跨平台的桌面应用
③基于restify
框架(http://restify.com/),可以快速构建 API 接口项目
④读写和操作数据库
、创建实用的命令行工具辅助前端开发、etc…
下载链接:https://nodejs.org/en/
查看版本号
:node –v
学习路线:JavaScript 基础语法 + Node.js 内置 API 模块(fs、path、http等)+ 第三方 API 模块(express、mysql 等)
命令
:node js文件名
终端快捷键:
①使用 ↑ 键,可以快速定位到上一次执行的命令
②使用 tab 键,能够快速补全路径
③使用 esc 键,能够快速清空当前已输入的命令
④输入 cls 命令,可以清空终端
定义:把复杂问题简单化,分成一个个小问题。编程领域中的模块化
,就是遵守固定的规则
,把一个大文件拆成独立并互相依赖
的多个小模块
把代码进行模块化拆分的好处:
定义:由Node.js官方提供,如fs、http、path
// 引用内部模块 const fs = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;fs&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); // 文件读取 fs.readFile(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;../files/test-fs.txt&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;utf-8&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (err, results) => { if (err) return console.log(err.message);// 错误信息err null console.log(results); }) // 文件写入 fs.writeFile(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;../files/test-fs.txt&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;Node.js&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;utf-8&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (err) => { if (err) return console.log(err.message); console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;写入文件成功!&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); })
注意点
readFile
只能读取已经存在的文件writeFile
写入内容已经有文件,则创建同名文件,再写入文件readFile
需要在writeFile
后面读取,不然出错node
命令自动将当前路径和js脚本文件路径
拼接,而不管.\day总复习这个路径
绝对路径
改善./
表示当前目录 ../
表示父级目录../..
表示祖父目录./ ../
,否则拼接失败 /…/定义:拼接绝对路径
const fs = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;fs&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); const path = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;path&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); const fpath = path.join(__dirname, &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/../files/test-fs.txt&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); fs.readFile(fpath, &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;utf-8&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (err, results) => { console.log(__dirname); console.log(path.basename(fpath, &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;.txt&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;)); console.log(path.extname(fpath)); if (err) return console.log(err.message); console.log(results); }) // test-fs // .txt // Node.js
定义:Node.js
提供创建web服务器
// 导入http模块 const http = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;http&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); //创建web服务器实例 const server = http.createServer(); //绑定request事件,监听客户端请求 server.on(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;request&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (req, res) => { let str = `路径 ${req.url} 方法 ${req.method}`; console.log(str); // 向客户端发送中文前,设置响应头 res.setHeader(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;Content-Type&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;text/html;charset=utf-8&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); res.end(str); }) //启动服务器 server.listen(80, () => { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;http://Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)7.0.0.Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); })
url地址
不同,返回相应的绝对路径
const fs = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;fs&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); const http = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;http&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); const path = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;path&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); const server = http.createServer(); let fpath = &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;; server.on(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;request&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (req, res) => { if (req.url === &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;) { fpath = path.join(__dirname + &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/../files/clock/index.html&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); console.log(__dirname); console.log(fpath); } else { fpath = path.join(__dirname + &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/../files/clock&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9; + req.url); } fs.readFile(fpath, &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;utf-8&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (err, results) => { if (err) res.end(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;404 not find&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); res.end(results); }) }) server.listen(80, () => { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;http://Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)7.0.0.Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); })
定义:用户自定义的js模块
//引入本地文件 const custom = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;./0Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)-node.js的使用&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;);
注意:自定义模块开头必须有./ …/
定义:由第三方
提供,使用前需要下载
//下载外部导入 const moment = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;moment&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;);
npm i nodemon -g
代替node
使用nodedmon
,每次修改内容不需要重启服务器,自动监听
模块作用域定义
:和函数一致,当前模块定义的方法、变量,只能在当前模块
访问,防止变量污染
暴露
:通过module.exports
或者exports
暴露出去,使用 require()
方法导入模块时,导入的结果,永远以module.exports
指向的对象为准
定义: 一次加载缓存,从缓存加载
,内置模块
加载优先级MAX
包:概念像node.js
的第三方模块
,包是基于内置模块
封装出来的,提供了更高级、更方便的 API
,极大的提高了开发效率
npm: 包管理工具
安装包
导入包
使用包
// npm i moment const moment = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;moment&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); const date = moment().format(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;YYYY-MM-DD HH:mm:ss&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); console.log(date);//Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)0Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)-09-Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)0 Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)0:4Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte):Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)4
包的版本号是以“点分十进制”形式进行定义的,总共有三位数字,例如 Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte).Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)4.0
其中每一位数字所代表的的含义如下:
第Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)位数字:大版本
第Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)位数字:功能版本
第Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)位数字:Bug修复版本
版本号提升的规则:只要前面的版本号增长了,则后面的版本号归零。
npm i comment@Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte).Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte).Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)
node_modules
文件夹用来存放所有已安装到项目中的包。require() 导入第三方包时,就是从这个目录中查找并加载包。package-lock.json
配置文件用来记录 node_modules 目录下的每一个包的下载信息,例如包的名字、版本号、下载地址等。package.json
项目的名称、版本号、描述等、用到了哪些包、开发期间使用的包、部署使用的包devDependencies
:开发依赖dependencies
:核心依赖//安装包 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_4Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)664096/article/details/Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)797Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)60
//查看当前npm镜像 npm config get registry //nrm镜像工具,安装为全局镜像 nrm ls //切换镜像 nrm use taobao
一个规范的包,它的组成结构,必须符合以下 Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte) 点要求:
单独的目录
而存在package.json
这个包管理配置文件name,version,main
这三个属性,分别代表包的名字、版本号、包的入口
发布包到npm
上
npm login
登录npm publish
npm unpublish 包名 --force
资源:
Express
:基于Node.js http
进一步封装,更加高级的Web开发框架
对于前端程序员来说,最常见的两种服务器,分别是:
Web 网页资源
的服务器 API 接口
的服务器//导入包 const express = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;express&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); //创建服务器 const app = express(); app.get(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/user&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (req, res) => { res.send({ 男: &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)8&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, age: Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)8 }); }) app.post(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/user&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (req, res) => { res.send(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;post请求&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); }) app.get(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (req, res) => { //req.query ?name=zs&age=Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)8 这种数据 //http://Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)7.0.0.Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)?name=zs&age=Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)8 console.log(req.query); }) app.post(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/:id&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (req, res) => { //动态匹配参数 console.log(req.params); }) //启动服务器 app.listen(80, () => { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;http://Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)7.0.0.Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); })
定义
:通过路径暴露文件,省去文件路径的描写
const express = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;express&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); const app = express(); //托管静态资源,不需要访问 app.use(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/public&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, express.static(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;../files/clock&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;)); app.listen(80, () => { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;http://Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)7.0.0.Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); })
推荐VScode插件:postcode
Express 的中文官网: http://www.expressjs.com.cn/
定义
:客户端与服务器映射关系
//导入包 const express = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;express&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); //创建服务器 const app = express(); app.get(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/user&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (req, res) => { res.send({ 男: &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)8&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, age: Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)8 }); }) app.post(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/user&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (req, res) => { res.send(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;post请求&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); }) //启动服务器 app.listen(80, () => { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;http://Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)7.0.0.Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); })
为了方便对路由进行模块化的管理
,Express 不建议将路由直接挂载到 app 上,而是推荐将路由抽离为单独的模块
。
将路由抽离为单独模块的步骤
如下:
创建路由模块
对应的 .js
文件
调用express.Router()
函数创建路由对象
向路由对象上挂载具体的路由
使用 module.exports
向外共享路由对象
使用app.use()
函数注册路由模块
创建路由对象
const express = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;express&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;);//导入包 const router = express.Router();//创建路由对象 //绑定路由规则 router.get(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/user/list&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (req, res) => { res.send(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;user list message&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); }) router.post(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/user/add&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (req, res) => { res.send(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;user add message&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); }) //向外导出路由对象 module.exports = router;
使用路由对象
const express = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;express&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); const app = express(); const router = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;./Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)-模块化路由&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); app.use(router); app.listen(80, () => { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;http://Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)7.0.0.Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); })
中间件:与路由处理函数不同,必须包含next参数
const express = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;express&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); const app = express(); //全局中间件的简化形式 app.use((req, res, next) => { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;正在使用全局中间件&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); next(); }); app.get(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;,(req, res) => { res.send(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;Get message&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); }) app.listen(80, () => { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;http://Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)7.0.0.Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); })
注意
多个中间件共享req,res
,上游设置好,下游的中间件/路由使用
中间件
定义先后顺序执行
局部生效
的中间件,定义在
app.get(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;,中间件,(req, res) => { res.send(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;Get message&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); })
路由之前
调用中间件
next()函数
不能忘,后面不用写内容
const express = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;express&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); const app = express(); //全局中间件 app.use((req, res, next) => { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;全局中间件&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); next(); }) //局部中间件 function mw(req, res, next) { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;局部中间件&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); next(); } app.get(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, mw, (req, res) => { res.send(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;server is visting&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); }) app.listen(80, () => { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;http://Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)7.0.0.Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); })
定义:绑定到 express.Router()
实例上的中间件
定义:捕获项目
错误,防止出错,在所有路由之后
定义
const express = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;express&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); const app = express(); app.get(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (req, res) => { throw new Error(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;服务器出错&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); res.send(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;server is visting&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); }) //全局中间件 app.use((err, req, res, next) => { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;Error!&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9; + err.message); res.send(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;Error!&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9; + err.message); next(); }) app.listen(80, () => { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;http://Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)7.0.0.Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); }) //Error!服务器出错
const express = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;express&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); const app = express(); // express.json()解析JSON请求体 app.use(express.json()); //解析application/x-www- app.use(express.urlencoded({ extended: false })); app.post(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/user&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (req, res) => { console.log(req.body); }) app.post(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/book&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (req, res) => { console.log(req.body); }) app.listen(80, () => { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;http://Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)7.0.0.Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); }) // http://Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)7.0.0.Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte) // { name: &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;zs&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, age: Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)8 } // [Object: null prototype] { name: &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;西游记&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9; }
npm install body-parse
require
导入app.use()
为全局const express = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;express&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); const app = express(); const parser = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;body-parser&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); app.use(parser.urlencoded({ extended: false })); app.post(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/book&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (req, res) => { console.log(req.body); }) app.listen(80, () => { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;http://Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)7.0.0.Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); })
注意:Express 内置的 express.urlencoded
中间件,就是基于 body-parser
这个第三方中间件进一步封装出来的。
封装中间件
const querystring = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;querystring&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); function parsebody(req, res, next) { let str = &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;; req.on(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;data&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (result) => { str += result; }) req.on(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;end&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, () => { const body = querystring.parse(str); req.body = body; next(); }) } module.exports = parsebody;
测试中间件
const express = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;express&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); const app = express(); const parsebody = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;./Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)4-自定义中间件&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); app.use(parsebody); app.post(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/user&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (req, res) => { res.send(req.body); console.log(req.body); }) app.listen(80, () => { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;http://Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)7.0.0.Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); })
const express = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;express&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); const app = express(); const router = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;./Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)5-接口问题&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); app.use(router); app.listen(80, () => { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;http://Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)7.0.0.Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); })
const express = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;express&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); const apiRouter = express.Router(); apiRouter.get(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/user&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (req, res) => { const query = req.query; res.send({ status: 0, msg: &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;GET 请求成功&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, data: query }); }) module.exports = apiRouter;
apiRouter.use(express.urlencoded({ extended: false })); apiRouter.post(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;/user&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, (req, res) => { const body = req.body; res.send({ status: 0, msg: &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;POST 请求成功&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, data: body }); })
https://blog.csdn.net/qq_4Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)85/article/details/Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)985Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)94
https://zhuanlan.zhihu.com/p/Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)5454697
概念:由Http
响应头构成,决定浏览器
是否阻止js代码
获取资源,在服务器端
配置
//只允许特定的域名访问、*代表全部 res.setHeader(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;Access-Control-Allow-Origin&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;http://www.baidu.com&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); //配置请求头信息 res.setHeader(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;Access-Control-Allow-Headers&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;Content-Type,X-Custom-Header&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); //配置请求头方法 * 代表全部 res.setHeader(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;Access-Control-Allow-Methods&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;GET,POST,DELETE,PUT&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;);
无自定义头部字段
、Accept、Accept-Language、Content-Language、DPR、Downlink、Save-Data、Viewport-Width、Width 、Content-Type(只有三个值application/x-www-form-urlencoded、multipart/form-data、text/plain)一次请求
自定义
头部字段OPTION预检
,成功后发送带有数据的请求概念:只支持GET
请求
定义:组织
、存储
、管理数据
的仓库
select * from userswhere id>Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte) and id <5
insert into users(username,password) values(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;jack&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;,&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;666&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;)
update users set password=&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;666666&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;where username=&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;jack&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;
delete from users where id=9
npm i mysql
//引入mysql const mysql = require(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;mysql&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); //建立数据库连接 const db = mysql.createPool({ url: &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)7.0.0.Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;,//数据库IP地址 user: &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;root&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;,//账号 password: &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)456&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;,//密码 database: &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;test_db&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;//操作哪一个数据库 });
const queryStr = &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;select * from users&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)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 .\Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)8-mysql操作.js [ RowDataPacket { id: Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte), username: &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;zz&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, password: &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, status: 0 }, RowDataPacket { id: Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte), username: &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;ls&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, password: &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;abc&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, status: 0 }, RowDataPacket { id: 4, username: &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;jony&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, password: &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;456&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, status: 0 } ]
const user = { username: &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;superman&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, password: &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;jknad&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9; }; const insertStr = &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;insert into users set ?&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;; db.query(insertStr, user, (err, results) => { if (err) return console.log(err.message); if (results.affectedRows == Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)) { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;插入数据成功&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); } }) //插入数据成功
const user = { id: Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)0, username: &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;super&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;, password: &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)456&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9; }; const updateStr = &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;update users set ? where id=?&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;; db.query(updateStr, [user, user.id], (err, results) => { if (err) return console.log(err.message); if (results.affectedRows == Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)) { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;更新数据成功&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); } })
const deleteStr = &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;delete from users where id=?&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;; db.query(deleteStr, Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)0, (err, results) => { if (err) return console.log(err.message); if (results.affectedRows == Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)) { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;删除成功&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); } })
const deleteStr = &#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;update users set status=Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte) where id=?&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;; db.query(deleteStr, Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)0, (err, results) => { if (err) return console.log(err.message); if (results.affectedRows == Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)) { console.log(&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;删除成功&#Cet article vous donnera une compréhension approfondie de Node.js (explication détaillée avec images et texte)9;); } })
概念:服务端在后台拼接html页面
,发送给客户端,不需要ajax
特点:
概念:后端提供API
接口,前端通过ajax
调用接口
特点:
不谈业务场景而盲目选择使用何种开发模式都是耍流氓
Site Web de niveau entreprise
, la fonction principale est l'affichage sans interaction complexe et nécessite un bon SEO
, nous devons alors utiliser le rendu côté serveur
企业级网站
,主要功能是展示而没有复杂的交互,并且需要良好的 SEO
,则这时我们就需要使用服务器端渲染
后台管理项目
,交互性
比较强,不需要考虑 SEO
,那么就可以使用前后端分离
的开发模式首屏服务器端渲染 + 其他页面前后端分离
的开发模式概念:通过不同的手段(验证码、密码、人脸、指纹...
),认证客户的身份
Cookie:存储在浏览器不超过4KB
字符串,键值对
形式存储
隐私数据
核心:会员卡+pos机认证
npm install express-session
Projet de gestion backend
, l'interactivité
est relativement forte et il n'est pas nécessaire de considérer le SEO
, vous pouvez alors utiliser Le modèle de développement de séparation front-end et back-end
De plus, le modèle de développement spécifique à utiliser n'est pas absolu afin de prendre en compte à la fois la vitesse de rendu de la page d'accueil et celle de la page d'accueil. efficacité de développement de la séparation front-end et front-end, certains sites Web adoptent le premier écran Rendu côté serveur + autres modèles de développement avec séparation front-end et back-end
/strong> : Authentifier l'identité du client par différents moyens (Code de vérification, mot de passe, visage, empreinte digitale...
)
4 Ko
maximum stockée dans le navigateur, paire clé-valeur
Stockage du formulaire🎜🎜🎜Envoyé automatiquement🎜 🎜Indépendant du nom de domaine🎜🎜Délai d'expiration🎜🎜Limite de 4 Ko🎜🎜Facile à falsifier, déconseillé de stocker des données privées
🎜🎜🎜🎜Carte de membre + authentification du terminal POS
🎜🎜🎜🎜🎜npm install express-session
🎜🎜🎜Plus de connaissances relatives aux nœuds, veuillez visiter : 🎜tutoriel Nodejs🎜 ! 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!