124 lines
2.3 KiB
JavaScript
124 lines
2.3 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
/**
|
||
|
* Module dependencies.
|
||
|
*/
|
||
|
|
||
|
const util = require('util');
|
||
|
const Stream = require('stream');
|
||
|
const ResponseBase = require('../response-base');
|
||
|
|
||
|
/**
|
||
|
* Expose `Response`.
|
||
|
*/
|
||
|
|
||
|
module.exports = Response;
|
||
|
|
||
|
/**
|
||
|
* Initialize a new `Response` with the given `xhr`.
|
||
|
*
|
||
|
* - set flags (.ok, .error, etc)
|
||
|
* - parse header
|
||
|
*
|
||
|
* @param {Request} req
|
||
|
* @param {Object} options
|
||
|
* @constructor
|
||
|
* @extends {Stream}
|
||
|
* @implements {ReadableStream}
|
||
|
* @api private
|
||
|
*/
|
||
|
|
||
|
function Response(req) {
|
||
|
Stream.call(this);
|
||
|
const res = (this.res = req.res);
|
||
|
this.request = req;
|
||
|
this.req = req.req;
|
||
|
this.text = res.text;
|
||
|
this.body = res.body !== undefined ? res.body : {};
|
||
|
this.files = res.files || {};
|
||
|
this.buffered = 'string' == typeof this.text;
|
||
|
this.header = this.headers = res.headers;
|
||
|
this._setStatusProperties(res.statusCode);
|
||
|
this._setHeaderProperties(this.header);
|
||
|
this.setEncoding = res.setEncoding.bind(res);
|
||
|
res.on('data', this.emit.bind(this, 'data'));
|
||
|
res.on('end', this.emit.bind(this, 'end'));
|
||
|
res.on('close', this.emit.bind(this, 'close'));
|
||
|
res.on('error', this.emit.bind(this, 'error'));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Inherit from `Stream`.
|
||
|
*/
|
||
|
|
||
|
util.inherits(Response, Stream);
|
||
|
ResponseBase(Response.prototype);
|
||
|
|
||
|
/**
|
||
|
* Implements methods of a `ReadableStream`
|
||
|
*/
|
||
|
|
||
|
Response.prototype.destroy = function(err){
|
||
|
this.res.destroy(err);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Pause.
|
||
|
*/
|
||
|
|
||
|
Response.prototype.pause = function(){
|
||
|
this.res.pause();
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Resume.
|
||
|
*/
|
||
|
|
||
|
Response.prototype.resume = function(){
|
||
|
this.res.resume();
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Return an `Error` representative of this response.
|
||
|
*
|
||
|
* @return {Error}
|
||
|
* @api public
|
||
|
*/
|
||
|
|
||
|
Response.prototype.toError = function() {
|
||
|
const req = this.req;
|
||
|
const method = req.method;
|
||
|
const path = req.path;
|
||
|
|
||
|
const msg = `cannot ${method} ${path} (${this.status})`;
|
||
|
const err = new Error(msg);
|
||
|
err.status = this.status;
|
||
|
err.text = this.text;
|
||
|
err.method = method;
|
||
|
err.path = path;
|
||
|
|
||
|
return err;
|
||
|
};
|
||
|
|
||
|
|
||
|
Response.prototype.setStatusProperties = function(status){
|
||
|
console.warn("In superagent 2.x setStatusProperties is a private method");
|
||
|
return this._setStatusProperties(status);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* To json.
|
||
|
*
|
||
|
* @return {Object}
|
||
|
* @api public
|
||
|
*/
|
||
|
|
||
|
Response.prototype.toJSON = function() {
|
||
|
return {
|
||
|
req: this.request.toJSON(),
|
||
|
header: this.header,
|
||
|
status: this.status,
|
||
|
text: this.text,
|
||
|
};
|
||
|
};
|