Skip to content

Commit

Permalink
(fix) reroute missing promise error handling
Browse files Browse the repository at this point in the history
(fix) reroute missing missing response data
(add) get method to resource manger
  • Loading branch information
jstty committed Sep 12, 2016
1 parent 71775ff commit bd2b993
Show file tree
Hide file tree
Showing 7 changed files with 75 additions and 42 deletions.
17 changes: 8 additions & 9 deletions examples/api/externalservice-basic/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,15 @@ hyper1.load({
routes: [{
api: '/service1/hello',
method: {
get: function hello ($done, $services) {
get: function hello ($done, $services, $logger) {
$services.find('service2')
.get('/service2/world', {
query: {
hello: 'world1'
}
})
.then(function (data) {
$logger.log('service1 hello data:', data);
$done(data);
});
}
Expand All @@ -39,14 +40,12 @@ hyper1.load({
api: '/service2/hello',
method: {
get: function hello ($done, $services) {
$services.find('service3')
// return promise, resolve to API JSON responce
return $services.find('service3')
.get('/service3/world', {
query: {
hello: 'world2'
}
})
.then(function (data) {
$done(data);
});
}
}
Expand All @@ -59,9 +58,10 @@ hyper1.load({
hello2: $input.query.hello,
ts: new Date()
};
$logger.log('world2 data:', data);
$logger.log('service2 world data:', data);

$done(data);
// return data, as API JSON responce
return data;
}
}
}]
Expand Down Expand Up @@ -98,11 +98,10 @@ app1.then(function () {
api: '/service3/world',
method: {
get: function hello ($done, $input) {
var data = {
return {
hello3: $input.query.hello,
ts: new Date()
};
$done(data);
}
}
}]
Expand Down
6 changes: 3 additions & 3 deletions examples/api/prepost-route-multifile/controllers/hello.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ function HelloCtrl () {
// (eg, generators, promises, throw errors...)
HelloCtrl.prototype.$preRoute = function ($input, $error, $q) {
if (!$input.query || !$input.query.q) {
// TODO: support throwing errors
// TODO: support throwing errors
$error('missing search input', 404);
/*
throw new Error({
Expand All @@ -20,7 +20,7 @@ HelloCtrl.prototype.$preRoute = function ($input, $error, $q) {
*/
}
else {
// can return promise, like handler
// can return promise, like handler
return $q.resolve({
pre: $input.query.q,
data: this.data
Expand All @@ -38,7 +38,7 @@ HelloCtrl.prototype.$postRoute = function ($output) {
};
}
else {
// can return data, like handler
// can return data, like handler
$output.data.post = 'test2';
}

Expand Down
19 changes: 19 additions & 0 deletions legacy/manager.resource.js
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,25 @@ var ResourceManager = function () {
return list;
}

/*
* get resource instance by name
* @return resource instance
*/

}, {
key: 'get',
value: function get(resName) {
var resInst;
_.forEach(this._resources, function (resource, name) {
if (name === resName) {
resInst = resource.instance;
// shortcut exit
return false;
}
});
return resInst;
}

/*
* @return resource instance
*/
Expand Down
16 changes: 8 additions & 8 deletions legacy/service.middleware/apiviewRoutes.js
Original file line number Diff line number Diff line change
Expand Up @@ -408,21 +408,21 @@ var ApiViewRoutes = function (_ServiceMiddleware) {
} else {
done(output);
}
}, function (err) {
}).catch(function (err) {
error({ error: err });
});
}
// if result is not promise and not null or undefined
else if (result !== null && result !== undefined) {
else if (_.isObject(result) && result.data && result.code) {
// TODO: figure out better way to handle combined input/vs just data
// API breaking change?
var output = result;
if (output && output.data && output.code) {
done(output.data, output.code, output.headers);
} else {
done(output);
}
done(result.data, result.code, result.headers);
}
// else if result is something
else if (result !== null && result !== undefined) {
done(result);
}
// TODO: is a timer needed here in case handler never resloves the route

return deferer.promise;
}
Expand Down
16 changes: 16 additions & 0 deletions lib/manager.resource.js
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,22 @@ class ResourceManager {
return list;
}

/*
* get resource instance by name
* @return resource instance
*/
get (resName) {
var resInst;
_.forEach(this._resources, function (resource, name) {
if (name === resName) {
resInst = resource.instance;
// shortcut exit
return false;
}
});
return resInst;
}

/*
* @return resource instance
*/
Expand Down
41 changes: 20 additions & 21 deletions lib/service.middleware/apiviewRoutes.js
Original file line number Diff line number Diff line change
Expand Up @@ -375,32 +375,31 @@ class ApiViewRoutes extends ServiceMiddleware {

// if result is promise, fire done on the result data
if (when.isPromiseLike(result)) {
result
.then(function (output) {
// TODO: figure out better way to handle combined input/vs just data
// API breaking change?
if (output && output.data && output.code) {
done(output.data, output.code, output.headers);
}
else {
done(output);
}
}, function (err) {
error({ error: err });
});
result.then(function (output) {
// TODO: figure out better way to handle combined input/vs just data
// API breaking change?
if (output && output.data && output.code) {
done(output.data, output.code, output.headers);
}
else {
done(output);
}
})
.catch(function (err) {
error({ error: err });
});
}
// if result is not promise and not null or undefined
else if (result !== null && result !== undefined) {
else if (_.isObject(result) && result.data && result.code) {
// TODO: figure out better way to handle combined input/vs just data
// API breaking change?
var output = result;
if (output && output.data && output.code) {
done(output.data, output.code, output.headers);
}
else {
done(output);
}
done(result.data, result.code, result.headers);
}
// else if result is something
else if (result !== null && result !== undefined) {
done(result);
}
// TODO: is a timer needed here in case handler never resloves the route

return deferer.promise;
}
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "hyper.io",
"version": "0.6.3",
"version": "0.6.4",
"description": "MicroServices so fast they've gone plaid!",
"homepage": "https://github.com/jstty/hyper.io#readme",
"keywords": [
Expand Down

0 comments on commit bd2b993

Please sign in to comment.