Map not found to 404 for hasOne
This commit is contained in:
parent
c7f1143f5b
commit
4bf5970f9c
28
lib/model.js
28
lib/model.js
|
@ -431,6 +431,17 @@ Model.belongsToRemoting = function(relationName, relation, define) {
|
||||||
}, fn);
|
}, fn);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function convertNullToNotFoundError(toModelName, ctx, cb) {
|
||||||
|
if (ctx.result !== null) return cb();
|
||||||
|
|
||||||
|
var fk = ctx.getArgByName('fk');
|
||||||
|
var msg = 'Unknown "' + toModelName + '" id "' + fk + '".';
|
||||||
|
var error = new Error(msg);
|
||||||
|
error.statusCode = error.status = 404;
|
||||||
|
error.code = 'MODEL_NOT_FOUND';
|
||||||
|
cb(error);
|
||||||
|
}
|
||||||
|
|
||||||
Model.hasOneRemoting = function(relationName, relation, define) {
|
Model.hasOneRemoting = function(relationName, relation, define) {
|
||||||
var pathName = (relation.options.http && relation.options.http.path) || relationName;
|
var pathName = (relation.options.http && relation.options.http.path) || relationName;
|
||||||
var toModelName = relation.modelTo.modelName;
|
var toModelName = relation.modelTo.modelName;
|
||||||
|
@ -441,7 +452,8 @@ Model.hasOneRemoting = function(relationName, relation, define) {
|
||||||
accepts: {arg: 'refresh', type: 'boolean', http: {source: 'query'}},
|
accepts: {arg: 'refresh', type: 'boolean', http: {source: 'query'}},
|
||||||
description: 'Fetches hasOne relation ' + relationName,
|
description: 'Fetches hasOne relation ' + relationName,
|
||||||
accessType: 'READ',
|
accessType: 'READ',
|
||||||
returns: {arg: relationName, type: relation.modelTo.modelName, root: true}
|
returns: {arg: relationName, type: relation.modelTo.modelName, root: true},
|
||||||
|
rest: {after: convertNullToNotFoundError.bind(null, toModelName)}
|
||||||
});
|
});
|
||||||
|
|
||||||
define('__create__' + relationName, {
|
define('__create__' + relationName, {
|
||||||
|
@ -468,24 +480,12 @@ Model.hasOneRemoting = function(relationName, relation, define) {
|
||||||
description: 'Deletes ' + relationName + ' of this model.',
|
description: 'Deletes ' + relationName + ' of this model.',
|
||||||
accessType: 'WRITE'
|
accessType: 'WRITE'
|
||||||
});
|
});
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Model.hasManyRemoting = function(relationName, relation, define) {
|
Model.hasManyRemoting = function(relationName, relation, define) {
|
||||||
var pathName = (relation.options.http && relation.options.http.path) || relationName;
|
var pathName = (relation.options.http && relation.options.http.path) || relationName;
|
||||||
var toModelName = relation.modelTo.modelName;
|
var toModelName = relation.modelTo.modelName;
|
||||||
|
|
||||||
function convertNullToNotFoundError(ctx, cb) {
|
|
||||||
if (ctx.result !== null) return cb();
|
|
||||||
|
|
||||||
var fk = ctx.getArgByName('fk');
|
|
||||||
var msg = 'Unknown "' + toModelName + '" id "' + fk + '".';
|
|
||||||
var error = new Error(msg);
|
|
||||||
error.statusCode = error.status = 404;
|
|
||||||
error.code = 'MODEL_NOT_FOUND';
|
|
||||||
cb(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
var findByIdFunc = this.prototype['__findById__' + relationName];
|
var findByIdFunc = this.prototype['__findById__' + relationName];
|
||||||
define('__findById__' + relationName, {
|
define('__findById__' + relationName, {
|
||||||
isStatic: false,
|
isStatic: false,
|
||||||
|
@ -496,7 +496,7 @@ Model.hasManyRemoting = function(relationName, relation, define) {
|
||||||
description: 'Find a related item by id for ' + relationName,
|
description: 'Find a related item by id for ' + relationName,
|
||||||
accessType: 'READ',
|
accessType: 'READ',
|
||||||
returns: {arg: 'result', type: toModelName, root: true},
|
returns: {arg: 'result', type: toModelName, root: true},
|
||||||
rest: {after: convertNullToNotFoundError}
|
rest: {after: convertNullToNotFoundError.bind(null, toModelName)}
|
||||||
}, findByIdFunc);
|
}, findByIdFunc);
|
||||||
|
|
||||||
var destroyByIdFunc = this.prototype['__destroyById__' + relationName];
|
var destroyByIdFunc = this.prototype['__destroyById__' + relationName];
|
||||||
|
|
Loading…
Reference in New Issue