この記事では、モジュール処理、パッケージの基本的な適用、Express、クロスドメイン、Mysql データベースの操作など、多くのコードと図を通して Node.js を詳細に分析します。皆さんのお役に立てれば幸いです!
Node.js
は、組み込みの ApI
を呼び出す js であり、 に基づいています。 Chrome V8
エンジン. 環境に関しては以前ローカルに散在していた知識をまとめたのですが、それを統合して今日発信していきます。
公式 Web サイトのアドレス : https://nodejs.org/zh-cn/
① Express
フレームワーク (http://www.expressjs.com.cn/) をベースに、Web アプリケーションを迅速に構築できます。 [関連チュートリアルの推奨事項: nodejs ビデオ チュートリアル 、プログラミング教育 ]
② Electron
フレームワーク (https://electronjs.org/) に基づく) を使用すると、クロスプラットフォームのデスクトップ アプリケーションを構築できます。
③restify
フレームワーク (http://restify.com/) に基づいて、API インターフェイス プロジェクトを迅速に構築できます
④読み取りと書き込み データベース
の操作、フロントエンド開発を支援する実用的なコマンドラインツールの作成など...
ダウンロード リンク: https://nodejs.org/en/
:node –v
学習ルート: JavaScript の基本構文 Node.js 組み込み API モジュール (fs、path、http など) サードパーティ API モジュール (express、mysql など) )
: ノードjsファイル名
: ①↑キーを使用して、最後に実行したコマンドをすばやく見つけます。
②Tab キーを使用して、すぐに実行したコマンドを見つけます。パスを完了します。
#この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説) esc キーを使用すると、現在入力されているコマンドをすぐにクリアできます。
##4cls コマンドを入力してターミナルをクリアします。##定義: 複雑な問題を単純化し、分割する小さな問題に。プログラミングの分野における
モジュール化とは、固定ルールに従い、大きなファイルを独立した 相互依存性のある複数の
小さなモジュール#に分割することです。 ##コードをモジュール化する利点
:
コードの再利用性の向上
コードの再利用性の向上保守性オンデマンドでロード可能
##(この記事では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 後で読みます。そうしないとエラーが発生します
(この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)) 動的スプライシングを防止します
# #node絶対パスを使用します
改善
(この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)) パスの問題
./ は親ディレクトリを表します ../..
は祖父ディレクトリを表します
##この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説).この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説).この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説) パスが構築されました-モジュール内
定義
: スプライシング絶対パス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
提供创建web服务器
// 导入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;); })
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;); })
定义:用户自定义的js模块
//引入本地文件 const custom = require(&#この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)9;./0この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)-node.js的使用&#この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)9;);
注意:自定义模块开头必须有./ …/
定义:由第三方
提供,使用前需要下载
//下载外部导入 const moment = require(&#この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)9;moment&#この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)9;);
npm i nodemon -g
代替node
使用nodedmon
,每次修改内容不需要重启服务器,自动监听
模块作用域定义
:和函数一致,当前模块定义的方法、变量,只能在当前模块
访问,防止变量污染
暴露
:通过module.exports
或者exports
暴露出去,使用 require()
方法导入模块时,导入的结果,永远以module.exports
指向的对象为准
定义: 一次加载缓存,从缓存加载
,内置模块
加载优先级MAX
包:概念像node.js
的第三方模块
,包是基于内置模块
封装出来的,提供了更高级、更方便的 API
,极大的提高了开发效率
npm: 包管理工具
安装包
导入包
使用包
// 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を徹底的に理解します(画像と文章で詳しく解説)4.0
其中每一位数字所代表的的含义如下:
第この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)位数字:大版本
第この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)位数字:功能版本
第この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)位数字:Bug修复版本
版本号提升的规则:只要前面的版本号增长了,则后面的版本号归零。
npm i comment@この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説).この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説).この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)
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_4この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)664096/article/details/この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)797この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)60
//查看当前npm镜像 npm config get registry //nrm镜像工具,安装为全局镜像 nrm ls //切换镜像 nrm use taobao
一个规范的包,它的组成结构,必须符合以下 この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説) 点要求:
单独的目录
而存在package.json
这个包管理配置文件name,version,main
这三个属性,分别代表包的名字、版本号、包的入口
发布包到npm
上
npm login
登录npm publish
npm unpublish 包名 --force
资源:
Express
:基于Node.js http
进一步封装,更加高级的Web开发框架
对于前端程序员来说,最常见的两种服务器,分别是:
Web 网页资源
的服务器 API 接口
的服务器//导入包 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;); })
定义
:通过路径暴露文件,省去文件路径的描写
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/
定义
:客户端与服务器映射关系
//导入包 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;); })
为了方便对路由进行模块化的管理
,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;); })
中间件:与路由处理函数不同,必须包含next参数
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;); })
路由之前
调用中间件
next()函数
不能忘,后面不用写内容
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;); })
定义:绑定到 express.Router()
实例上的中间件
定义:捕获项目
错误,防止出错,在所有路由之后
定义
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!服务器出错
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; }
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
这个第三方中间件进一步封装出来的。
封装中间件
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;); })
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;); })
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;
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 }); })
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
概念:由Http
响应头构成,决定浏览器
是否阻止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;);
无自定义头部字段
、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>この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説) and id <5
insert into users(username,password) values(&#この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)9;jack&#この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)9;,&#この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)9;666&#この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)9;)
update users set password=&#この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)9;666666&#この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)9;where username=&#この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)9;jack&#この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)9;
delete from users where id=9
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;//操作哪一个数据库 });
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 } ]
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;); } }) //插入数据成功
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;); } })
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;); } })
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;); } })
概念:服务端在后台拼接html页面
,发送给客户端,不需要ajax
特点:
概念:后端提供API
接口,前端通过ajax
调用接口
特点:
不谈业务场景而盲目选择使用何种开发模式都是耍流氓
エンタープライズ レベルの Web サイト
では、主な機能は複雑な操作を行わずに表示することであり、優れた SEO
が必要です。その場合は、 サーバー側を使用する必要があります。レンダリング
バックエンド管理プロジェクト
と同様に、対話性
は比較的強力であり、SEO
を考慮する必要はありません。使用できる フロントエンドとバックエンドの分離
開発モデルファースト スクリーンのサーバー側で他のページをレンダリングする
フロントエンドとバックエンドを分離した開発モデルコンセプト: さまざまな手段 (検証コード、パスワード、顔、指紋) を通じて顧客の身元を認証します。 ...)
: 4KB を超えない文字列としてブラウザに保存され、# の形式で保存されます。 ## キーと値のペア
自動的に送信される
npm install Express-session
ノード関連の知識については、
nodejs チュートリアル以上がこの記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。