refactor context: move the non-delegated properties up
This commit is contained in:
parent
9407d7776c
commit
b88babe5ee
1 changed files with 94 additions and 94 deletions
188
lib/context.js
188
lib/context.js
|
@ -15,6 +15,100 @@ var http = require('http');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inspect implementation.
|
||||||
|
*
|
||||||
|
* @return {Object}
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
inspect: function(){
|
||||||
|
return this.toJSON();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return JSON representation.
|
||||||
|
*
|
||||||
|
* @return {Object}
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
toJSON: function(){
|
||||||
|
return {
|
||||||
|
request: this.request.toJSON(),
|
||||||
|
response: this.response.toJSON()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Throw an error with `msg` and optional `status`
|
||||||
|
* defaulting to 500. Note that these are user-level
|
||||||
|
* errors, and the message may be exposed to the client.
|
||||||
|
*
|
||||||
|
* this.error(403)
|
||||||
|
* this.error('name required', 400)
|
||||||
|
* this.error('something exploded')
|
||||||
|
*
|
||||||
|
* @param {String|Number} msg
|
||||||
|
* @param {Number} status
|
||||||
|
* @api public
|
||||||
|
*/
|
||||||
|
|
||||||
|
error: function(msg, status){
|
||||||
|
// TODO: switch order... feels weird now that im used to express
|
||||||
|
if ('number' == typeof msg) {
|
||||||
|
var tmp = msg;
|
||||||
|
msg = http.STATUS_CODES[tmp];
|
||||||
|
status = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
var err = new Error(msg);
|
||||||
|
err.status = status || 500;
|
||||||
|
err.expose = true;
|
||||||
|
throw err;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default error handling.
|
||||||
|
*
|
||||||
|
* @param {Error} err
|
||||||
|
* @api private
|
||||||
|
*/
|
||||||
|
|
||||||
|
onerror: function(err){
|
||||||
|
// don't do anything if there is no error.
|
||||||
|
// this allows you to pass `this.onerror`
|
||||||
|
// to node-style callbacks.
|
||||||
|
if (!err) return;
|
||||||
|
|
||||||
|
// nothing we can do here other
|
||||||
|
// than delegate to the app-level
|
||||||
|
// handler and log.
|
||||||
|
if (this.headerSent) {
|
||||||
|
err.headerSent = true;
|
||||||
|
this.app.emit('error', err, this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// delegate
|
||||||
|
this.app.emit('error', err, this);
|
||||||
|
|
||||||
|
// force text/plain
|
||||||
|
this.type = 'text';
|
||||||
|
|
||||||
|
// ENOENT support
|
||||||
|
if ('ENOENT' == err.code) err.status = 404;
|
||||||
|
|
||||||
|
// default to 500
|
||||||
|
err.status = err.status || 500;
|
||||||
|
|
||||||
|
// respond
|
||||||
|
var code = http.STATUS_CODES[err.status];
|
||||||
|
var msg = err.expose ? err.message : code;
|
||||||
|
this.status = err.status;
|
||||||
|
this.res.end(msg);
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delegate to Request#header.
|
* Delegate to Request#header.
|
||||||
*/
|
*/
|
||||||
|
@ -343,98 +437,4 @@ module.exports = {
|
||||||
attachment: function() {
|
attachment: function() {
|
||||||
return this.response.attachment.apply(this.response, arguments);
|
return this.response.attachment.apply(this.response, arguments);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
|
||||||
* Inspect implementation.
|
|
||||||
*
|
|
||||||
* @return {Object}
|
|
||||||
* @api public
|
|
||||||
*/
|
|
||||||
|
|
||||||
inspect: function(){
|
|
||||||
return this.toJSON();
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return JSON representation.
|
|
||||||
*
|
|
||||||
* @return {Object}
|
|
||||||
* @api public
|
|
||||||
*/
|
|
||||||
|
|
||||||
toJSON: function(){
|
|
||||||
return {
|
|
||||||
request: this.request.toJSON(),
|
|
||||||
response: this.response.toJSON()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Throw an error with `msg` and optional `status`
|
|
||||||
* defaulting to 500. Note that these are user-level
|
|
||||||
* errors, and the message may be exposed to the client.
|
|
||||||
*
|
|
||||||
* this.error(403)
|
|
||||||
* this.error('name required', 400)
|
|
||||||
* this.error('something exploded')
|
|
||||||
*
|
|
||||||
* @param {String|Number} msg
|
|
||||||
* @param {Number} status
|
|
||||||
* @api public
|
|
||||||
*/
|
|
||||||
|
|
||||||
error: function(msg, status){
|
|
||||||
// TODO: switch order... feels weird now that im used to express
|
|
||||||
if ('number' == typeof msg) {
|
|
||||||
var tmp = msg;
|
|
||||||
msg = http.STATUS_CODES[tmp];
|
|
||||||
status = tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
var err = new Error(msg);
|
|
||||||
err.status = status || 500;
|
|
||||||
err.expose = true;
|
|
||||||
throw err;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Default error handling.
|
|
||||||
*
|
|
||||||
* @param {Error} err
|
|
||||||
* @api private
|
|
||||||
*/
|
|
||||||
|
|
||||||
onerror: function(err){
|
|
||||||
// don't do anything if there is no error.
|
|
||||||
// this allows you to pass `this.onerror`
|
|
||||||
// to node-style callbacks.
|
|
||||||
if (!err) return;
|
|
||||||
|
|
||||||
// nothing we can do here other
|
|
||||||
// than delegate to the app-level
|
|
||||||
// handler and log.
|
|
||||||
if (this.headerSent) {
|
|
||||||
err.headerSent = true;
|
|
||||||
this.app.emit('error', err, this);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// delegate
|
|
||||||
this.app.emit('error', err, this);
|
|
||||||
|
|
||||||
// force text/plain
|
|
||||||
this.type = 'text';
|
|
||||||
|
|
||||||
// ENOENT support
|
|
||||||
if ('ENOENT' == err.code) err.status = 404;
|
|
||||||
|
|
||||||
// default to 500
|
|
||||||
err.status = err.status || 500;
|
|
||||||
|
|
||||||
// respond
|
|
||||||
var code = http.STATUS_CODES[err.status];
|
|
||||||
var msg = err.expose ? err.message : code;
|
|
||||||
this.status = err.status;
|
|
||||||
this.res.end(msg);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue