Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/liammartens/nextjs-api-utils
Set of Next.js API utilities
https://github.com/liammartens/nextjs-api-utils
api express nextjs
Last synced: 11 days ago
JSON representation
Set of Next.js API utilities
- Host: GitHub
- URL: https://github.com/liammartens/nextjs-api-utils
- Owner: LiamMartens
- License: mit
- Created: 2021-02-09T17:47:16.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2021-11-28T05:13:28.000Z (about 3 years ago)
- Last Synced: 2024-10-18T16:14:06.586Z (2 months ago)
- Topics: api, express, nextjs
- Language: TypeScript
- Homepage:
- Size: 9.77 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# nextjs-api-utils
This package contains some API utilities to be used with Next.js## Utilities
### chainMiddleware
This utility can be used to chain express like middleware. Usage is as follows
```js
import { chainMiddleware } from 'nextjs-api-utils';export default async (req, res) => {
await chainMiddleware(req, res, [
/** middleware functions */
], async (req, res) => {
/** actual API request body */
});
}
```
### answer
This function can be used to generate a standardized answer from a next.js API route. It can be used as follows:
```js
import { answer, ErrorCodes } from 'nextjs-api-utils';export default (req, res) => {
return answer(req, res, {
statusCode: 400,
errorCode: ErrorCodes.INTERNAL_SERVER_ERROR,
data: { foo: 'bar' },
meta: { foo: 'baz' }
});
}
```
This will result in the HTTP request returning a `400` status code and the following body
```json
{
"success": false,
"errorCode": "internal_server_error",
"data": { "foo": "bar" },
"meta": {
"time": "2021-02-09T17:23:35.775Z",
"foo": "baz"
}
}
```### redirect
This method can be used to redirect to a new page from an API request.
```js
import { redirect, ErrorCodes } from 'nextjs-api-utils';export default (req, res) => {
return redirect(req, res, {
redirectTo: {
url: '/',
query: { foo: 'bar' }
},
statusCode: 400,
errorCode: ErrorCodes.BAD_REQUEST,
});
}
```
This will redirect the user using a `303` HTTP status to the following path `/?foo=bar&statusCode=400&errorCode=bad_request`. The additional query parameters are added as this is intended to be used when an API request fails when directly accessed by a user.### redirectOrAnswer
This method is a combination of `answer` and `redirect`. It will use the normalized answer when a `accept` header is present containing `application/json`. Otherwise it will redirect the user using the provided parameters. Usage is almost identical to the `answer` method with the addition of the `redirectTo`, `onBeforeAnswer` and `onBeforeRedirect` options.## Middlewares
For usage with `chainMiddleware`.### attempt
This middleware will wrap the API body in a `try-catch` statement. Upon failing it will use `redirectOrAnswer` with a status code of `500`. The "on error" behavior of this can be customized by calling `setAttemptErrorHandler`.```js
import { setAttemptErrorHandler, redirectOrAnswer } from 'nextjs-api-utils';
setAttemptErrorHandler((req, res, error) => {
return redirectOrAnswer({ ... })
});
```### isMethod
This middleware can be used to check the incoming HTTP method before executing the API body. The on fail behavior of this middleware can be customized using `setIsMethodErrorHandler`