Determine the data you want to get from your client just like GraphQL with easy to plug express middleware!
View Examples
·
Report Bug
·
Request Feature
Table of Contents
The requestFieldsSelectorMiddleware provide an easy way to pick the fields of the response you send from the api in your client! just like GraphQl and even with the same syntax. The middleware improve your api by reducing over-fetching and less data transportation. Designed to use in any express api.
I was getting sick of making many if else statements to reduce the data transportation from my api to my client and GraphQl doesn't always fit in the project type so I wanted to make an easy way to improve all my servers with the advantages of GraphQl.
npm install request-fields-selector
For more examples, please refer to the Project`s tests and Example server
- First add the request-fields-selector middleware to your server above all the crud routes:
import requestFieldsSelectorMiddleware from 'request-fields-selector'
const app = express()
app.use(express.json())
app.use(requestFieldsSelectorMiddleware)
// You can add config object
app.use((...args) => requestFieldsSelectorMiddleware(...args,
{
silent: true //no error logs
dataNestedField: "data" // e.g your response look like this {data:"your data",status:"ok",...} the value that will be transformed will be data
fieldSelectorName: "customFieldsName" // the default fields will be taken from your req.query or req.body and called "fields"
}
))
- Then in your client:
const API_URL = "http://happy";
const data = await fetch(`${API_URL}?fields=
{
book {
author
}
}`);
//or as one liner
const data = await fetch(`${API_URL}?fields={book{author}}`);
//in the post method:
const fields = `
{
book{
id
author{
firstName
}
}
`;
const data = await fetch({
method: "POST",
body: JSON.stringify({ ...body, fields }),
});
- Then in your api routes:
app.get("/", (req: Request, res: Response) => {
const { transform } = req; // the middleware will provide transform function that will match the client fields to the data you about to send - if error happen it will send the whole data
res.json(transform(data));
});
See the open issues for a list of proposed features (and known issues).
Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Follow the commits and linting guides (conventional commits and eslint)
- Open a Pull Request
- Make sure that the pull request passed all the workflows
Distributed under the MIT License. See LICENSE for more information.
Shahar Eliyahu - mail
Project Link: https://github.com/ShaharEli/requestFieldsSelector