検索
ホームページウェブフロントエンドjsチュートリアルこの記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)

この記事では、モジュール処理、パッケージの基本的な適用、Express、クロスドメイン、Mysql データベースの操作など、多くのコードと図を通して Node.js を詳細に分析します。皆さんのお役に立てれば幸いです!

この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)

この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説). Node.js の概要この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)>この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説).この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説) Node.js とはこの記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)>

Node.js は、組み込みの ApI を呼び出す js であり、 に基づいています。 Chrome V8 エンジン. 環境に関しては以前ローカルに散在していた知識をまとめたのですが、それを統合して今日発信していきます。

公式 Web サイトのアドレス : 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 インターフェイス プロジェクトを迅速に構築できます

④読み取りと書き込み データベースの操作、フロントエンド開発を支援する実用的なコマンドラインツールの作成など...

##この記事では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を徹底的に理解します(画像と文章で詳しく解説)>#コマンド

: ノードjsファイル名

この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)

ターミナル ショートカット キー

: ①↑キーを使用して、最後に実行したコマンドをすばやく見つけます。

②Tab キーを使用して、すぐに実行したコマンドを見つけます。パスを完了します。

#この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説) esc キーを使用すると、現在入力されているコマンドをすぐにクリアできます。

##4cls コマンドを入力してターミナルをクリアします。

#この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説) . モジュール処理この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説).この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説) モジュール性とはこの記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)>この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)>

##定義この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説): 複雑な問題を単純化し、分割する小さな問題に。プログラミングの分野における

モジュール化

とは、固定ルールに従い、大きなファイルを独立した 相互依存性のある複数の 小さなモジュール#に分割することです。 ##コードをモジュール化する利点:コードの再利用性の向上

コードの再利用性の向上保守性オンデマンドでロード可能

  • ##この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説).この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説) 組み込みモジュール
  • ##定義
: 公式に提供されていますNode.js (例: fs、http、パスこの記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)>##この記事では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;);
})

Note

readFile
は既存のファイルのみを読み取ることができます ファイル
writeFile

には書き込むファイルがすでに存在します。次に、同じ名前のファイルを作成して、

readFile
  • に書き込む必要があります。 writeFile 後で読みます。そうしないとエラーが発生します
  • (この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)) 動的スプライシングを防止します
  • # #node
  • コマンドは、
に関係なく、現在のパスと
js スクリプト ファイルのパス を自動的に結合します。\日は必ずこのパスを確認してください

この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説) 絶対パスを使用します

改善
  • (この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)) パスの問題
  • ./
  • は現在のディレクトリを表します
../

は親ディレクトリを表します この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)../..

は祖父ディレクトリを表します
は動的に結合され、ヘッダーは表示できません ./ . ./
、そうでない場合は
    スプライシングが失敗します
  • /…/##この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説).この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説).この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説) パスが構築されました-モジュール内
  • 定義: スプライシング絶対パス
    • 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

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

  • たとえば、エンタープライズ レベルの Web サイト では、主な機能は複雑な操作を行わずに表示することであり、優れた SEO が必要です。その場合は、 サーバー側を使用する必要があります。レンダリング
  • そして、バックエンド管理プロジェクトと同様に、対話性は比較的強力であり、SEOを考慮する必要はありません。使用できる フロントエンドとバックエンドの分離 開発モデル
  • また、使用する特定の開発モデルは絶対的なものではありません。ホームページとフロントエンドとバックエンドの分離による開発効率の向上を図るため、一部の Web サイトでは ファースト スクリーンのサーバー側で他のページをレンダリングする フロントエンドとバックエンドを分離した開発モデル
##7.この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説) ID 認証この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)>

コンセプト: さまざまな手段 (検証コード、パスワード、顔、指紋) を通じて顧客の身元を認証します。 ...)

この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)

7.この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説) セッション認証メカニズムこの記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)>

7.この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説).この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説) Cookie

この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)

#Cookie

: 4KB を超えない文字列としてブラウザに保存され、# の形式で保存されます。 ## キーと値のペア 自動的に送信される

    独立したドメイン名
  • #有効期限制限
  • 4KB 制限
  • 偽造は簡単ですが、保存は推奨されません
  • プライベートデータ

この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)

7.この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説).この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説) セッション

コア:

会員カードPOS機認証

この記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)npm install Express-session

  • ノード関連の知識については、nodejs チュートリアル
  • を参照してください。

以上がこの記事ではNode.jsを徹底的に理解します(画像と文章で詳しく解説)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はcsdnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
JavaScriptとWeb:コア機能とユースケースJavaScriptとWeb:コア機能とユースケースApr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Python vs. JavaScript:コミュニティ、ライブラリ、リソースPython vs. JavaScript:コミュニティ、ライブラリ、リソースApr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター