odin/node_modules/node-http-xhr/README.md
2022-11-26 15:56:34 +01:00

88 lines
2.2 KiB
Markdown

# `node-http-xhr`
[![npm][npm-status]][npm]
[![Build Status][build-status]][travis]
An implementation of [`XMLHttpRequest`][mdn-xhr] for [`node.js`][nodejs] using
the [`http.request`][nodejs-http] API.
[npm-status]:https://nodei.co/npm/node-http-xhr.png
[npm]:https://www.npmjs.com/package/node-http-xhr
[build-status]: https://travis-ci.org/aspyrx/node-http-xhr.svg?branch=master
[travis]: https://travis-ci.org/aspyrx/node-http-xhr
[mdn-xhr]: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest
[nodejs]: https://nodejs.org
[nodejs-http]: https://nodejs.org/dist/latest/docs/api/http.html
## Motivation
This package was written to provide the `XMLHttpRequest` API to test browser
code that is being tested in a `node.js` environment.
## Installation
```sh
npm install --save node-http-xhr
```
## Usage
```javascript
// Standalone usage
var XMLHttpRequest = require('node-http-xhr');
// Usage as global XHR constructor
global.XMLHttpRequest = require('node-http-xhr');
var req = new XMLHttpRequest();
// Event handlers via .on${event} properties:
req.onreadystatechange = function() {
console.log('readyState: ' + req.readyState);
};
// or using .addEventListener(event, handler):
req.addEventListener('load', function() {
console.log('response: ' + req.response);
});
req.open('GET', 'https://github.com/aspyrx', true);
req.send();
```
### Note about browser environments
If you use a bundler like `browserify` or `webpack` that follows the `browser`
field in `package.json`, the module will simply export `window.XMLHttpRequest`.
This is provided for sake of compatibility.
## Development
### Documentation
To generate documentation:
```sh
npm run doc
```
The `html` documentation will be placed in `doc/`.
### Tests
```sh
npm test
```
### Known issues
Currently, some features are lacking:
- Some ProgressAPI events (`loadstart`, `loadend`, `progress`)
- `responseType` values other than `''` or `'text'` and corresponding parsing
- As a result of the above, `overrideMimeType()` isn't very useful
- `setRequestHeader()` doesn't check for forbidden headers.
- `withCredentials` is defined as an instance property, but doesn't do anything
since there's no use case for CORS-like requests in `node.js` right now.