[json-server] json-serverの詳細な説明

JSON-Serverは、Expressサーバーを実行するノードモジュールです。APIのデータソースとしてjsonファイルを指定できます。

json-serverをインストールします

npm install -g json-server

json-serverを起動します

json-serverjsonフルRESTfulスタイルでファイルをWebサーバーに直接ホストしAPIクロスドメインjsonp、ルーティング、ルーティングのカスタマイズ、データスナップショットの保存などの機能をサポートできます。

db.jsonファイルの内容:

{
  "course": [
    {
      "id": 1000,
      "course_name": "马连白米且",
      "autor": "袁明",
      "college": "金并即总变史",
      "category_Id": 2
    },
    {
      "id": 1001,
      "course_name": "公拉农题队始果动",
      "autor": "高丽",
      "college": "先了队叫及便",
      "category_Id": 2
    }
  }
}

たとえば、次のコマンドはdb.jsonファイルをWebサービスとしてホストます。

$ json-server --watch --port 53000 db.json

出力は次のようになり、起動が成功したことを示します。

\{
    
    ^_^}/ hi!

Loading db.json
Done

Resources
http://localhost:53000/course

Home
http://localhost:53000

Type s + enter at any time to create a snapshot of the database
Watching...

この時点で、ブラウザを開いて次のように入力できます:http:// localhost:53000 / course

json-serverの関連する起動パラメーター

  • 文法:json-server [options] <source>

  • オプションのリスト:

パラメータ 速記 デフォルト 説明
--config -c 構成ファイルを指定します [デフォルト値: "json-server.json"]
- ポート -p ポートを設定します[デフォルト値:3000]
- ホスト -H ドメインの設定[デフォルト値: "0.0.0.0"] ストリング
- 見る -w ファイルを見る 聞くかどうか
-ルート -r カスタムルートを指定する  
-ミドルウェア -m ミドルウェアファイルを指定する [アレイ]
- 静的 -s 静的ファイルディレクトリを設定する 静的ディレクトリ、アナロジー:エクスプレス静的ディレクトリ
-読み取り専用 --ro GETリクエストのみを許可する[ブール値]  
--nocors --nc クロスオリジンリソースシェアリングを無効にする[ブール値]  
- 番号 gzip 、-ngGZIPコンテンツエンコーディングを無効にする[ブール値]  
-スナップショット -S スナップショットディレクトリを設定します[デフォルト値: "。"]  
- ディレイ -d 応答に遅延を追加する(ms)  
--id -私 データベースIDプロパティを設定します(例:_id)[デフォルト値: "id"]  
--foreignKeySuffix - fks外部キーサフィックスを設定します(例:post_idのように_id) [デフォルト値: "Id"]
- 助けて -h ヘルプ情報を表示する [ブール値]
- バージョン -v バージョン番号を表示する [ブール値]
  • ソースは、jsonファイルまたはjsファイルにすることができます。例:
$ json-server --watch -c ./jsonserver.json
$ json-server --watch app.js
$ json-server db.json
json-server --watch -port 8888 db.json

シミュレーションデータを動的に生成する

たとえば、json-serverを起動するコマンドjson-server --watch app.js は、jsファイルによって返されたデータをWebサービスにホストすることです。

mockjsライブラリを使用したapp.jsは、アナログデータを簡単に生成できます。

// 用mockjs模拟生成数据
var Mock = require('mockjs');

module.exports = () => {
    
    
  // 使用 Mock
  var data = Mock.mock({
    
    
    'course|227': [
      {
    
    
        // 属性 id 是一个自增数,起始值为 1,每次增 1
        'id|+1': 1000,
        course_name: '@ctitle(5,10)',
        autor: '@cname',
        college: '@ctitle(6)',
        'category_Id|1-6': 1
      }
    ],
    'course_category|6': [
      {
    
    
        "id|+1": 1,
        "pid": -1,
        cName: '@ctitle(4)'
      }
    ]
  });
  // 返回的data会作为json-server的数据
  return data;
};
// 返回的data会作为json-server的数据
return data;
};

ルーティング

デフォルトルート

json-server提供するにはGETPOST、  PUT、  PATCH 、DELETEAPIリクエストと同様に、それぞれ、データエンティティのすべてのタイプのために対応しています。

# 获取所有的课程信息
GET    /course

# 获取id=1001的课程信息
GET    /course/1001

# 添加课程信息,请求body中必须包含course的属性数据,json-server自动保存。
POST   /course

# 修改课程,请求body中必须包含course的属性数据
PUT    /course/1
PATCH  /course/1

# 删除课程信息
DELETE /course/1

# 获取具体课程信息id=1001
GET    /course/1001

カスタムルーティング

もちろん、ルーティングをカスタマイズできます。

$ json-server --watch --routes route.json db.json

route.jsonファイル

{
    
    
  "/api/*": "/$1",    //   /api/course   <==>  /course
  "/:resource/:id/show": "/:resource/:id",
  "/posts/:category": "/posts?category=:category",
  "/articles\\?id=:id": "/posts/:id"
}

カスタムプロファイル

コマンドラインからルーティング、データファイル、モニタリングなどを設定すると、コマンドが非常に長くなり、間違いを犯しやすくなります。npmのスクリプトにコマンドを書き込むことはできますが、設定は依然として不便です。

json-serverを使用すると、すべての構成を構成ファイルに入れることができます。これはデフォルトの構成ファイルですjson-server.json

例えば:

{
    
    
  "port": 53000,
  "watch": true,
  "static": "./public",
  "read-only": false,
  "no-cors": false,
  "no-gzip": false,
  "routes": "route.json"
}

構成ファイルを使用してjson-serverを起動します。

# 默认使用:json-server.json配置文件
$ json-server --watch app.js  
# 指定配置文件
$ json-server --watch -c jserver.json db.json

フィルタクエリ

クエリデータ、追加を提供できます

GET /posts?title=json-server&author=typicode
GET /posts?id=1&id=2
可以用 . 访问更深层的属性。
GET /comments?author.name=typicode

还可以使用一些判断条件作为过滤查询的辅助。

GET /posts?views_gte=10&views_lte=20

使用可能なスプライシング条件は次のとおりです。

  • _gte :以上
  • _lte :以下
  • _ne :等しくない
  • _like :含まれています
GET /posts?id_ne=1
GET /posts?id_lte=100
GET /posts?title_like=server

ページングクエリ

デフォルトのバックグラウンド処理ページングパラメータは _page ページ数とページ _limitあたりのアイテム数です。

GET /posts?_page=7
GET /posts?_page=7&_limit=20

デフォルトでは、ページごとに10個のエントリがあります。

バックグラウンドはX-Total-Countアイテムの総数を返し、データの総数は応答ヘッダーにあります。

ソート

  • パラメータ: _sort並べ替えフィールドを設定します
  • パラメータ: _order並べ替え方法を設定します(デフォルトの昇順)
GET /posts?_sort=views&_order=asc
GET /posts/1/comments?_sort=votes&_order=asc

複数フィールドの並べ替えをサポート:

GET /posts?_sort=user,views&_order=desc,asc

任意のスライスデータ

GET /posts?_start=20&_end=30
GET /posts/1/comments?_start=20&_end=30
GET /posts/1/comments?_start=20&_limit=10

全文検索

次のqようなパラメータで全文検索を実行できます。GET /posts?q=internet

実体関連

関連するサブエンティティ

子を含むオブジェクト、追加_embed

GET /posts?_embed=comments
GET /posts/1?_embed=comments

関連する親エンティティ

親を含むオブジェクト、追加_expand

GET /comments?_expand=post
GET /comments/1?_expand=post

その他の高度な使用法

json-serverエクスプレスによって開発され、深くカスタマイズすることができます。詳細は開始しません、具体的な詳細は公式サイトをご覧ください

  • カスタムルーティング
const jsonServer = require('json-server')
const server = jsonServer.create()
const router = jsonServer.router('db.json')
const middlewares = jsonServer.defaults()

server.use(middlewares)

server.get('/echo', (req, res) => {
    
    
  res.jsonp(req.query)
})

server.use(jsonServer.bodyParser)
server.use((req, res, next) => {
    
    
  if (req.method === 'POST') {
    
    
    req.body.createdAt = Date.now()
  }
  next()
})

server.use(router)
server.listen(3000, () => {
    
    
  console.log('JSON Server is running')
})
  • カスタム出力コンテンツ
router.render = (req, res) => { res.jsonp({ body: res.locals.data }) }
  • カスタムユーザー検証
const jsonServer = require('json-server')
const server = jsonServer.create()
const router = jsonServer.router('db.json')
const middlewares = jsonServer.defaults()

server.use(middlewares)
server.use((req, res, next) => {
    
    
 if (isAuthorized(req)) {
    
     // add your authorization logic here
   next() // continue to JSON Server router
 } else {
    
    
   res.sendStatus(401)
 }
})
server.use(router)
server.listen(3000, () => {
    
    
  console.log('JSON Server is running')
})

おすすめ

転載: blog.csdn.net/u013034585/article/details/105752215