Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/poppinss/request
Node.Js request wrapper used by AdonisJs framework
https://github.com/poppinss/request
adonis adonisjs node-req
Last synced: 16 days ago
JSON representation
Node.Js request wrapper used by AdonisJs framework
- Host: GitHub
- URL: https://github.com/poppinss/request
- Owner: poppinss
- License: mit
- Archived: true
- Created: 2019-05-10T14:52:34.000Z (over 5 years ago)
- Default Branch: develop
- Last Pushed: 2019-09-08T10:48:33.000Z (about 5 years ago)
- Last Synced: 2024-10-25T22:19:22.205Z (19 days ago)
- Topics: adonis, adonisjs, node-req
- Language: TypeScript
- Size: 325 KB
- Stars: 11
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Request
[![circleci-image]][circleci-url] [![npm-image]][npm-url] ![][typescript-image] [![license-image]][license-url]Wrapper over Node.js [req](https://nodejs.org/dist/latest/docs/api/http.html#http_class_http_incomingmessage) object to standardize and ease the process of reading data from HTTP requests.
## Table of contents
- [Features](#features)
- [Usage](#usage)
- [Config](#config)
- [Typescript support](#typescript-support)
- [API](#api)
- [Maintainers](#maintainers)## Features
1. Support for reading plain and signed cookies (only when signed via [@poppinss/response](https://github.com/poppinss/response))
2. Handy methods for content negotiation.
3. Handles inconsistencies between certain headers like `referer` and `referrer`.
4. Reliably reads `ip address` of proxied requests.
5. Assigns distributed unique `x-request-id` to each request.## Usage
Install the package from npm as follows:```sh
npm i @poppinss/request# yarn
yarn add @poppinss/request
```and then use it as follows
```ts
import { Request, RequestConfigContract } from '@poppinss/request'
import { createServer } from 'http'const config: RequestConfigContract = {
allowMethodSpoofing: false,
subdomainOffset: 2,
trustProxy: require('proxy-addr').compile('loopback'),
}createServer((req, res) => {
const request = new Request(req, res, config)
res.end(`${request.id()} ${request.url()}`)
})
```## Config
{
"allowMethodSpoofing": false
Since, standard HTML forms doesn't allow all HTTP verbs likePUT
,DELETE
and so on. TheallowMethodSpoofing
allows defining the HTTP method as a query string_method
.
WhenallowMethodSpoofing = true
and current request method is POST, thenrequest.method()
will give preference to the query string_method
property, over the original request method.
"subdomainOffset": 2
Offset indicates the number of values to remove from the end of the URL seperated by.
.
For example: For URLindicative.adonisjs.com
, therequest.subdomains()
method will return an array with['indicative']
.
"trustProxy"
A method that allows you to selectively trust the proxy servers. Make sure to read proxy-addr docs.
"getIp"
Optionally define a method to determine the user Ip adress. The method is helpful, when you want to rely on a different property to find the user ip address.
For example: Nginx setx-real-ip
header when used a proxy server.
In that case you can define your owngetIp
method for same.
getIp (request) {
// I am using nginx as a proxy server and want to trust 'x-real-ip'
return request.header('x-real-ip')
}
"secret"
Optional Define a secret to unsign and read cookies. Make sure you have used the same secret to sign the cookie via @poppinss/response package.
}
## Typescript support
The module is written in Typescript and exports following classes, types and interfaces.```ts
import { Request, RequestContract, RequestConfigContract} from '@poppinss/request'
```**RequestContract** is the interface that `Request` class adheres too. Since, you cannot extend concrete implementations in Typescript, you may need the interface to have a lossely typed flow.
```ts
Request.macro('cartValue', function () {
return Number(this.cookie('cart')) || 0
})
```then, you need to add `cartValue` to the interface
```ts
import { RequestContract as BaseContract } from '@poppinss/request'interface RequestContract extends BaseContract {
cartValue (): number
}const request = new Request(req, res, config) as unknown as RequestContract
```## API
Following are the autogenerated files via Typedoc* [API](docs/README.md)
## Maintainers
[Harminder virk](https://github.com/thetutlage)[circleci-image]: https://img.shields.io/circleci/project/github/poppinss/request/master.svg?style=for-the-badge&logo=appveyor
[circleci-url]: https://circleci.com/gh/poppinss/request "circleci"[npm-image]: https://img.shields.io/npm/v/@poppinss/request.svg?style=for-the-badge&logo=npm
[npm-url]: https://npmjs.org/package/@poppinss/request "npm"[typescript-image]: https://img.shields.io/badge/Typescript-294E80.svg?style=for-the-badge&logo=typescript
[license-url]: LICENSE.md
[license-image]: https://img.shields.io/aur/license/pac.svg?style=for-the-badge