I used loopback to set up an API, hitting a mongodb on my local. All good, and it's all running properly. Then I tried to move it to bluemix. When I got to the step for slc arc and using the composer, every time I try to check the db connection, I get an error that says, "invalid schema, expected mongodb".
This is the full error from the strongloop composer:
Oops! Something is wrong
invalid schema, expected mongodb
Message: invalid schema, expected mongodb
Request: /workspace/api/DataSourceDefinitions/server.mongoDB/testConnection
Staus: 500
Error: invalid schema, expected mongodb
at module.exports (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/node_modules/mongodb/lib/url_parser.js:20:11)
at connect (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/node_modules/mongodb/lib/mongo_client.js:125:16)
at Function.MongoClient.connect (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/node_modules/mongodb/lib/mongo_client.js:109:3)
at MongoDB.connect (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/lib/mongodb.js:113:25)
at Object.initializeDataSource [as initialize] (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/lib/mongodb.js:70:26)
at DataSource.setup (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-datasource-juggler/lib/datasource.js:332:17)
at new DataSource (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-datasource-juggler/lib/datasource.js:109:8)
at Registry.createDataSource (/Users/kusuriuri/Webworks/charapi/node_modules/loopback/lib/registry.js:349:12)
at dataSourcesFromConfig (/Users/kusuriuri/Webworks/charapi/node_modules/loopback/lib/application.js:415:19)
at EventEmitter.app.dataSource (/Users/kusuriuri/Webworks/charapi/node_modules/loopback/lib/application.js:222:12)
I tried fiddling with the datasources.fig.json so it looked the same as the datasources.json, but that didn't seem to do a thing. (Details omitted for sake of showing, replaced with [generic].)
{
"db": {
"name": "db",
"connector": "memory"
},
"mongoDB": {
"host": "[appname].mybluemix.net",
"port": 27017,
"url": "[appname].mybluemix.net",
"database": "strongloop",
"password": "[password]",
"name": "mongoDB",
"connector": "mongodb",
"user": "[username]"
}
}
Worst of all, now I can't even run it on my local! If I try slc run like usual, I get the same error. Here's the console output:
/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/node_modules/mongodb/lib/url_parser.js:20
throw new Error('invalid schema, expected mongodb');
^
Error: invalid schema, expected mongodb
at module.exports (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/node_modules/mongodb/lib/url_parser.js:20:11)
at connect (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/node_modules/mongodb/lib/mongo_client.js:125:16)
at Function.MongoClient.connect (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/node_modules/mongodb/lib/mongo_client.js:109:3)
at MongoDB.connect (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/lib/mongodb.js:113:25)
at Object.initializeDataSource [as initialize] (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-connector-mongodb/lib/mongodb.js:70:26)
at DataSource.setup (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-datasource-juggler/lib/datasource.js:332:17)
at new DataSource (/Users/kusuriuri/Webworks/charapi/node_modules/loopback-datasource-juggler/lib/datasource.js:109:8)
at Registry.createDataSource (/Users/kusuriuri/Webworks/charapi/node_modules/loopback/lib/registry.js:349:12)
at dataSourcesFromConfig (/Users/kusuriuri/Webworks/charapi/node_modules/loopback/lib/application.js:415:19)
at EventEmitter.app.dataSource (/Users/kusuriuri/Webworks/charapi/node_modules/loopback/lib/application.js:222:12)
Nothing anywhere is telling me how to fix this, or what's even caused it, and I don't know why I can't even run the app on my local anymore. What went wrong, and how do I get this thing working?
many thanks in advance!
First, you'll need to create a Mongo database accessible over the web. You could try MongoDB by Compose. You could also reveal the MongoDB instance on your local machine.
The host/port/url and other credentials for your MongoDB connnection are not the same as your Bluemix application URL. Rather, those credentials should point to an existing MongoDB instance.
Input the credentials to your MongoDB instance into your datasources.json
file. Whether your LoopBack application is running locally or on Bluemix, it should be able to connect to your MongoDB service.
Also, try using Arc (slc arc
) to create your database connection; you can easily test that your LoopBack application will be able to access the database with the Test Connection
button.