User:Saul/feathers

From Organic Design
Jump to: navigation, search

Feathers is a lightweight framework for setting up REST API's and realtime events.

Install

CLI

Install the cli to get started with you feathers application quickly.

npm install -g @feathersjs/cli

App

To get feathers to generate the app run:

feathers generate app

Authentication

To generate a authentication method use:

feathers generate authentication

Authentication methods include:

Username + Password (Local)
Auth0
Google
Facebook
GitHub

Services

Services are a way to set up the REST API for a service like messages, users, channels, ect.

feathers generate service

Hooks

To generate a hook via the command line run:

feathers generate hook

Setup

TBC

Usage

Reverse Pagination

The best way that I have found to get the latest objects in the database is to use $sort like so:

app.service("messages").find({
	query: {
		$limit: 10,
		$sort: {
			createdAt: -1
		}
	}
}).then(res => {
	const latestData = res.data.reverse();
};

Manipulating MongoDB Arrays

https://docs.mongodb.com/manual/reference/operator/update-array/

Curl

Curl can be useful to test services as you create them.

Create

Create (POST /service) – creates a new document

curl "http://localhost:3030/service" \
	-H "Content-Type: application/json" \
	--data-binary "{ 'email': 'feathers@example.com', 'password': 'secret' }";

Authenticate

Create (POST /authentication) – authenticates a user

curl "http://localhost:3030/authetication" \
	-H "Content-Type: application/json" \
	--data-binary "{ 'strategy': 'local', 'email': 'feathers@example.com', 'password': 'secret' }";

Sending Auth Token

To send the auth token with the command just add:

-H "Authorization: <your access token>"

For example:

curl "http://localhost:3030/service/123abc" \
	-X PATCH \
	-H "Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6ImFjY2VzcyJ9.eyJ1c2VySWQiOiI1YjcwYzU3MjM5MTU0NDc5NzJjZGUzZDUiLCJpYXQiOjE1MzQxMTkxMDgsImV4cCI6MTUzNDIwNTUwOCwiYXVkIjoiaHR0cHM6Ly95b3VyZG9tYWluLmNvbSIsImlzcyI6ImZlYXRoZXJzIiwic3ViIjoiYW5vbnltb3VzIiwianRpIjoiNWY3ZDY5YjktOWUxZS00NTgxLWFiMTItNjFkZmIxOTYxOGZkIn0.S_QHDjNf7DAp6-ZI3d_JpWgcMneBqfpkB2GgX_6eLwI" \
	-H "Content-Type: application/json" \
	--data-binary '{ "someProperty": "someValue" }'

Get

Get (GET /tasks/:id) – finds a single document by id

curl "http://localhost:3030/service/123abc"

Find

Find (GET /tasks) – finds all the documents matching the query (optional), also supports sorting and pagination

curl "http://localhost:3030/service"
curl "http://localhost:3030/service?someProperty=someValue"

Update

Update (PUT /tasks/:id) – updates the whole document by overwriting it with provided one (missing fields will be cleared)

curl "http://localhost:3030/service/123abc" \
	-X PUT \
	-H "Content-Type: application/json" \
	--data-binary '{ "someProperty": "someValue", "anotherProperty": "anotherValue" }'

Patch

Patch (PATCH /tasks/:id) – updates only the fields provided (missing fields will remain untouched)

curl "http://localhost:3030/service/123abc" \
	-X PATCH \
	-H "Content-Type: application/json" \
	--data-binary '{ "someProperty": "someValue" }'

Remove

Remove (DELETE /tasks/:id) – removes the document

curl "http://localhost:3030/service/123abc" \
	-X DELETE

Troubleshooting

Client Authentication

I had an issue where the client authenticated and I received the authentication token but when I use a service it says that I'm not authenticated.
The solution was to ensure that the client setup the transport before the authentication.