diff --git a/lib/datasource.js b/lib/datasource.js index 35c70e50..c8567e20 100644 --- a/lib/datasource.js +++ b/lib/datasource.js @@ -224,7 +224,16 @@ function tryModules(names, loader) { try { mod = loader(names[m]); } catch (e) { - /* ignore */ + var notFound = e.code === 'MODULE_NOT_FOUND' && + e.message && e.message.indexOf(names[m]) > 0; + + if (notFound) { + debug('Module %s not found, will try another candidate.', names[m]); + continue; + } + + debug('Cannot load connector %s: %s', names[m], e.stack || e); + throw e; } if (mod) { break; diff --git a/package.json b/package.json index be038566..9be9869a 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "bluebird": "^2.9.9", "eslint": "^2.13.1", "eslint-config-loopback": "^4.0.0", + "loopback-connector-throwing": "file:./test/fixtures/loopback-connector-throwing", "mocha": "^2.1.0", "should": "^8.0.2" }, diff --git a/test/datasource.test.js b/test/datasource.test.js index ec411c57..d947527c 100644 --- a/test/datasource.test.js +++ b/test/datasource.test.js @@ -24,4 +24,24 @@ describe('DataSource', function() { }); }).should.throw(/loopback-connector-throwing/); }); + + it('reports helpful error when connector init via short name throws', function() { + (function() { + // this is what LoopBack does + return new DataSource({ + name: 'dsname', + connector: 'throwing', + }); + }).should.throw(/expected test error/); + }); + + it('reports helpful error when connector init via long name throws', function() { + (function() { + // this is what LoopBack does + return new DataSource({ + name: 'dsname', + connector: 'loopback-connector-throwing', + }); + }).should.throw(/expected test error/); + }); }); diff --git a/test/fixtures/loopback-connector-throwing/index.js b/test/fixtures/loopback-connector-throwing/index.js new file mode 100644 index 00000000..f1079a05 --- /dev/null +++ b/test/fixtures/loopback-connector-throwing/index.js @@ -0,0 +1,8 @@ +// Copyright IBM Corp. 2013,2016. All Rights Reserved. +// Node module: loopback-datasource-juggler +// This file is licensed under the MIT License. +// License text available at https://opensource.org/licenses/MIT + +'use strict'; + +throw new Error('expected test error'); diff --git a/test/fixtures/loopback-connector-throwing/package.json b/test/fixtures/loopback-connector-throwing/package.json new file mode 100644 index 00000000..e1ca8f24 --- /dev/null +++ b/test/fixtures/loopback-connector-throwing/package.json @@ -0,0 +1,5 @@ +{ + "name": "loopback-connector-throwing", + "version": "1.0.0", + "description": "A dummy connector that throws at initialization time." +}