Create express.js routes from a mongoose model for ra-data-json-server. Very useful for rapid prototyping with MongoDB, Mongoose, and react-admin.
Example/demo project is available here: express-mongoose-ra-json-server-demo
NPM: npm add express-mongoose-ra-json-server
Yarn: yarn add express-mongoose-ra-json-server
PNPM: pnpm add express-mongoose-ra-json-server
import jsonServerProvider from "ra-data-json-server"; // Use ra-data-json-server
const apiUrl = "api/admin"; // Fill this in with your own URL or whatever you wish.
const dataProvider = jsonServerProvider(apiUrl, httpClient);
Refer to the typescript definitions in index.ts for a more complete information.
import raExpressMongoose from "express-mongoose-ra-json-server";
router.use("/user", raExpressMongoose(userModel));
Pass in the options as a second parameter to the function.
The currently exported typedefs contain just enough comments to describe what they do.
export interface raExpressMongooseOptions<T> {
/** Fields to search from ?q (used for autofill and search) */
q?: string[];
/** Base name for ACLs (e.g. list operation does baseName.list) */
aclName?: string;
/** Fields to allow regex based search (non-exact search) */
allowedRegexFields?: string[];
/** Regex flags for regex-based search */
regexFlags?: string;
/** Read-only fields to filter out during create and update */
readOnlyFields?: string[];
/** Function to transform inputs received in create and update */
inputTransformer?: (input: Partial<T>) => Promise<Partial<T>>;
/** Additional queries for list, e.g. deleted/hidden flag. */
listQuery?: Record<string, any>;
/** Max rows from a get operation to prevent accidental server suicide (default 100) */
maxRows?: number;
/** Extra selects for mongoose queries (in the case that certain fields are hidden by default) */
extraSelects?: string;
/** Disable or enable certain parts. */
capabilities?: raExpressMongooseCapabilities;
/** Specify a custom express.js router */
router?: Router;
/** Should all queries use lean? (default = true) */
useLean?: boolean;
/** Specify an ACL middleware to check against permissions */
ACLMiddleware?: (name: string) => RequestHandler;
}
MongoDB Query Operators can be used by appending them as a suffix to the field name (see here).
MongoDB Query Operator | Field Suffix | Description |
---|---|---|
$eq | _eq | Matches values that are equal to a specified value. (Useful for matching exact values if a field is included in allowedRegexFields) Example: /user?name_eq=Alex |
$gt | _gt | Matches values that are greater than a specified value. Example: /user?createdAt_gt=2022-10-25T00%3A00%3A00.000Z |
$gte | _gte | Matches values that are greater than or equal to a specified value. Example: /user?createdAt_gte=2022-10-25T00%3A00%3A00.000Z |
$in | _in | Matches any of the values specified in an array. Example: /user?name_in=Alex&name_in=Peter |
$lt | _lt | Matches values that are less than a specified value. Example: /user?createdAt_lt=2022-10-25T00%3A00%3A00.000Z |
$lte | _lte | Matches values that are less than or equal to a specified value. Example: /user?createdAt_lte=2022-10-25T00%3A00%3A00.000Z |
$ne | _ne | Matches all values that are not equal to a specified value. Example: /user?name_ne=Alex |
$nin | _nin | Matches none of the values specified in an array. Example: /user?name_nin=Alex&name_nin=Peter |