88 lines
2.2 KiB
Markdown
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.
|
|
|