自訂詞形變化
Mirage 依賴詞形變化器來處理其某些慣例。詞形變化器是一個負責將單字單數化和複數化的物件。
例如,假設您定義了一個 User
模型以及一個 GET 速記
createServer({
models: {
user: Model,
},
routes() {
this.get("/users/:id")
},
})
Mirage 使用其詞形變化器來判斷 "users" 是 "user" 的複數形式。因此,它可以自動採用您的 user
模型定義並建立 schema.users.all()
集合,並查看您的 /users/:id
速記,並知道它需要傳回單個 user
模型實例。
擁有一致的命名慣例可讓 Mirage 大幅減少連線模擬伺服器所需的樣板程式碼,但有時您會發現自己需要自訂網域中使用的詞形變化規則。
例如,假設您的應用程式中有一個 HeadOfState
模型,並且在系統中的其他任何地方,您都將 "head-of-state" 的複數形式視為 "heads-of-state"。
如果您像這樣設定伺服器
createServer({
models: {
headOfState: Model,
},
routes() {
this.get("/heads-of-state/:id")
},
})
那麼 Mirage 將無法按預期工作。這是因為 Mirage 的詞形變化器不知道這種特殊情況。預設情況下,它會將 "head-of-state" 複數化為 "head-of-states"。
您可以透過呼叫 server.inflector.pluralize
方法來查看此情況
let server = createServer({
models: {
headOfState: Model,
},
})
server.inflector.pluralize("head-of-state") // head-of-states
若要修正此問題,您需要新增自己的自訂詞形變化規則。Mirage 使用 inflected
套件 來進行詞形變化,您可以像這樣自訂它
import { inflections } from "inflected"
import { createServer, Model } from "miragejs"
inflections("en", function (inflect) {
inflect.irregular("head-of-state", "heads-of-state")
})
createServer({
headOfState: Model,
routes() {
this.get("/heads-of-state/:id")
},
})
請確保在您 new
您的 Mirage 伺服器之前執行您的詞形變化自訂程式碼。
驗證您的複數化規則是否生效
server.inflector.pluralize("head-of-state") // heads-of-state
現在,Mirage 的所有速記和 ORM 慣例都應該按您的預期工作。
Inflected 套件可讓您自訂複數、單數、不規則和不可數的字詞
inflections('en', function(inflect) {
inflect.plural(/^(ox)$/i, '$1$2en');
inflect.singular /^(ox)en/i, '$1');
inflect.irregular('octopus', 'octopi');
inflect.uncountable('equipment', 'snow');
});
如果您需要更多資訊,請查看 有關自訂詞形變化的文件。
您也可以完全使用不同的程式庫,或透過將 pluralize
和 singularize
方法作為 inflector
組態選項傳遞到您的 Mirage 伺服器中,來使用您自己的詞形變化器實作
createServer({
inflector: {
pluralize,
singularize,
},
})