An open API service indexing awesome lists of open source software.

https://github.com/nathanadhitya/express-mongoose-ra-json-server

creates express.js routes from a mongoose model for ra-data-json-server
https://github.com/nathanadhitya/express-mongoose-ra-json-server

react-admin

Last synced: 4 months ago
JSON representation

creates express.js routes from a mongoose model for ra-data-json-server

Awesome Lists containing this project

README

          

# express-mongoose-ra-json-server

[![npm](https://img.shields.io/npm/v/express-mongoose-ra-json-server)](https://www.npmjs.com/package/express-mongoose-ra-json-server)

Create express.js routes from a mongoose model for ra-data-json-server. Very useful for rapid prototyping with MongoDB, Mongoose, and [react-admin](https://github.com/marmelab/react-admin).
Example/demo project is available here: [express-mongoose-ra-json-server-demo](https://github.com/NathanAdhitya/express-mongoose-ra-json-server-demo)

## Installation

NPM: `npm add express-mongoose-ra-json-server`
Yarn: `yarn add express-mongoose-ra-json-server`
PNPM: `pnpm add express-mongoose-ra-json-server`

### Client Usage

```ts
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);
```

## Usage

Refer to the typescript definitions in [index.ts](src/index.ts) for a more complete information.

### Basic Usage

```ts
import raExpressMongoose from "express-mongoose-ra-json-server";
router.use("/user", raExpressMongoose(userModel));
```

### More Configuration Options

Pass in the options as a second parameter to the function.
The currently exported typedefs contain just enough comments to describe what they do.

```ts
export interface raExpressMongooseOptions {
/** 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) => Promise>;

/** Additional queries for list, e.g. deleted/hidden flag. */
listQuery?: Record;

/** 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;
}
```

## Query Operators

MongoDB Query Operators can be used by appending them as a suffix to the field name ([see here](https://marmelab.com/react-admin/FilteringTutorial.html#filter-operators)).

### Supported Operators

| 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` |