Comments (5)
I wrote the hook updates up in this blog post and it will also be in the Auk docs.
from feathers-rest.
I think this can be done at the service and hook level already. The following snippet should cache outgoing requests and return the cached request if the same request is made again while the current one is still going:
const cache = {};
app.hooks({
before(hook) {
const key = JSON.stringify([ hook.id, hook.params, hook.data ]);
// Noop for caching
hook.updateCache = function() {};
if(cache[key]) {
// Use the cache promise to set hook.result
return cache[key].then(result => {
hook.result = result;
return hook;
});
} else {
// Set the `hook.updateCache` method to resolve the promise we are putting in the cache
cache[key] = new Promise((resolve, reject) => {
hook.updateCache = function() {
delete cache[key];
if(hook.error) {
reject(hook.error);
} else {
resolve(hook.result)
}
}
});
}
},
after(hook) {
hook.updateCache();
},
error(hook) {
hook.updateCache();
}
});
There is probably other optimizations (e.g. a small timeout to gather more requests). Eventually we'd probably want to implement a more generalized caching plugin (that works on the server and client) and also update feathers-batch (which is somewhat related).
from feathers-rest.
Ah great, yeah that looks like it'll do the trick. I'll use that in future - thanks! I'm happy with that as a solution, and I'll keep an eye on feathers-hooks-common.
from feathers-rest.
@daffl it would be great to add that snippet to the client documentation.
The error
hook was particularly helpful for me as I was trying to do this using all kinds of things like trying to extend the services with methods that would catch errors on the request calls and then re-throw again ... it wasn't until I came across this issue that I realized you could set app level hooks 👍
from feathers-rest.
@daffl I was not aware of that so thanks for the references. The error hook at the app level is definitely super useful both on the client and the server!
from feathers-rest.
Related Issues (20)
- Consider how to handle file upload HOT 5
- Add headers and remote IP
- res.hook should exist in middleware after errors
- Setting 'content-type' header properly with boundary HOT 3
- $in: [] returning unexpected results HOT 2
- JSON-API + feathers-rest HOT 4
- Property 'axios' does not exist on type 'Transport' HOT 4
- $gte query example? HOT 2
- Map route parameters to `params.route` HOT 1
- How to return a pdf download file instead of data ?
- Update returning 204 HOT 2
- An in-range update of feathers is breaking the build 🚨 HOT 1
- Prepare for feathers v3 HOT 9
- Angular http implementation error HOT 1
- Client fails to parse json response on 204 status using fetch HOT 2
- $in operator doesn't work correctly through rest HOT 15
- fn.call is not a function(…) on client side with webpack HOT 2
- support axios? HOT 3
- Custom HTTP status code response HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from feathers-rest.