Skip to content

Commit 881e7e3

Browse files
committed
added docs and stuff
1 parent 6214217 commit 881e7e3

File tree

1 file changed

+70
-1
lines changed

1 file changed

+70
-1
lines changed

README.md

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,74 @@ Expressive and composable resolvers for Apollostack's GraphQL server
1010
Install the package:
1111

1212
```bash
13-
npm install apollo-errors
13+
npm install apollo-resolvers
14+
```
15+
16+
Create a base resolver for last-resort error masking:
17+
18+
```javascript
19+
import { createResolver } from 'apollo-resolvers';
20+
import { createError, isInstance } from 'apollo-errors';
21+
22+
const UnknownError = createError({
23+
message: 'An unknown error has occurred! Please try again later'
24+
});
25+
26+
export const baseResolver = createResolver(
27+
null, // don't pass a resolver function, we only care about errors
28+
29+
// Only mask errors that aren't already apollo-errors, such as ORM errors etc
30+
(root, args, context, error) => isInstance(error) ? error : new UnknownError()
31+
);
32+
```
33+
34+
Create a few ACL child resolvers:
35+
```javascript
36+
import { createError } from 'apollo-errors';
37+
38+
import baseResolver from './baseResolver';
39+
40+
const ForbiddenError = createError({
41+
message: 'You are not allowed to do this'
42+
});
43+
44+
const AuthenticationRequiredError = createError({
45+
message: 'You must be logged in to do this'
46+
});
47+
48+
export const isAuthenticatedResolver = baseResolver.createResolver(
49+
// Extract the user from context (undefined if non-existent)
50+
(root, args, { user }) => {
51+
if (!user) throw new AuthenticationRequiredError();
52+
}
53+
);
54+
55+
export const isAdminResolver = isAuthenticatedResolver.createResolver(
56+
// Extract the user and make sure they are an admin
57+
(root, args, { user }) => {
58+
if (!user.isAdmin) throw new ForbiddenError();
59+
}
60+
)
61+
```
62+
63+
Create a few real-work resolvers for our app:
64+
65+
```javascript
66+
import { isAuthenticatedResolver, isAdminResolver } from './acl';
67+
import { createError } from 'apollo-errors';
68+
69+
const NotYourUserError = createError({
70+
message: 'You cannot update the profile for other users'
71+
});
72+
73+
const updateMyProfile = isAuthenticatedResolver.createResolver(
74+
(root, { input }, { user, models: { UserModel } }) => {
75+
if (!user.isAdmin && input.id !== user.id) throw new NotYourUserError();
76+
return UserModel.update(input);
77+
}
78+
);
79+
80+
const banUser = isAdminResolver.createResolver(
81+
(root, { input }, { models: { UserModel } }) => UserModel.ban(input)
82+
);
1483
```

0 commit comments

Comments
 (0)