JSON-Serverは、Expressサーバーを実行するノードモジュールです。APIのデータソースとしてjsonファイルを指定できます。
json-serverをインストールします
npm install -g json-server
json-serverを起動します
json-server
json
フル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
提供するにはGET
、POST
、 PUT
、 PATCH
、DELETE
APIリクエストと同様に、それぞれ、データエンティティのすべてのタイプのために対応しています。
# 获取所有的课程信息
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')
})