- Add a datasource for each soap service
- Install debug and async
npm install --save async debug
- Add boot script
- Modify main server script to use call back
Created
November 7, 2014 22:46
-
-
Save lancehudson/bfd25d7931cc17a90707 to your computer and use it in GitHub Desktop.
Loopback.io autoexpose soap services
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var debug = require('debug')('attachEmptyModelsToSOAPEndpoints'), | |
async = require('async'), | |
dsFound = [], | |
dsToHook = []; | |
module.exports = function attachEmptyModelsToSOAPEndpoints(server, cb) { | |
// Get list of Data Sources to Hook | |
Object.keys(server.dataSources).forEach(function(dsName) { | |
var ds = server.dataSources[dsName]; | |
if(dsFound.indexOf(ds.settings.name) === -1 && | |
(ds.settings.connector === 'soap' || | |
ds.settings.connector === 'loopback-connector-soap') && | |
ds.settings.remotingEnabled) { | |
debug('found soap datasource ' + ds.settings.name); | |
dsFound.push(ds.settings.name); | |
dsToHook.push(dsName); | |
} | |
}); | |
async.each(dsToHook, function(dsName, callback) { | |
debug('hooking ' + dsName); | |
var ds = server.dataSources[dsName]; | |
ds.once('connected', function () { | |
debug('creating model for ' + ds.settings.name); | |
server.model(ds.createModel(ds.settings.name, {})); | |
callback(null); | |
}); | |
}, function(err) { | |
cb(); | |
}); | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"AdGroupAdService": { | |
"name": "AdGroupAdService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/AdGroupAdService?wsdl", | |
"remotingEnabled": true | |
}, | |
"AdGroupBidModifierService": { | |
"name": "AdGroupBidModifierService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/AdGroupBidModifierService?wsdl", | |
"remotingEnabled": true | |
}, | |
"AdGroupCriterionService": { | |
"name": "AdGroupCriterionService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/AdGroupCriterionService?wsdl", | |
"remotingEnabled": true | |
}, | |
"AdGroupFeedService": { | |
"name": "AdGroupFeedService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/AdGroupFeedService?wsdl", | |
"remotingEnabled": true | |
}, | |
"AdGroupService": { | |
"name": "AdGroupService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/AdGroupService?wsdl", | |
"remotingEnabled": true | |
}, | |
"AdParamService": { | |
"name": "AdParamService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/AdParamService?wsdl", | |
"remotingEnabled": true | |
}, | |
"AdwordsUserListService": { | |
"name": "AdwordsUserListService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/rm/v201409/AdwordsUserListService?wsdl", | |
"remotingEnabled": true | |
}, | |
"BiddingStrategyService": { | |
"name": "BiddingStrategyService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/BiddingStrategyService?wsdl", | |
"remotingEnabled": true | |
}, | |
"BudgetOrderService": { | |
"name": "BudgetOrderService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/billing/v201409/BudgetOrderService?wsdl", | |
"remotingEnabled": true | |
}, | |
"BudgetService": { | |
"name": "BudgetService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/BudgetService?wsdl", | |
"remotingEnabled": true | |
}, | |
"CampaignAdExtensionService": { | |
"name": "CampaignAdExtensionService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/CampaignAdExtensionService?wsdl", | |
"remotingEnabled": true | |
}, | |
"CampaignCriterionService": { | |
"name": "CampaignCriterionService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/CampaignCriterionService?wsdl", | |
"remotingEnabled": true | |
}, | |
"CampaignFeedService": { | |
"name": "CampaignFeedService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/CampaignFeedService?wsdl", | |
"remotingEnabled": true | |
}, | |
"CampaignService": { | |
"name": "CampaignService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/CampaignService?wsdl", | |
"remotingEnabled": true | |
}, | |
"CampaignFeedService": { | |
"name": "CampaignFeedService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/CampaignFeedService?wsdl", | |
"remotingEnabled": true | |
}, | |
"CampaignSharedSetService": { | |
"name": "CampaignSharedSetService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/CampaignSharedSetService?wsdl", | |
"remotingEnabled": true | |
}, | |
"ConstantDataService": { | |
"name": "ConstantDataService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/ConstantDataService?wsdl", | |
"remotingEnabled": true | |
}, | |
"ConversionTrackerService": { | |
"name": "ConversionTrackerService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/ConversionTrackerService?wsdl", | |
"remotingEnabled": true | |
}, | |
"CustomerFeedService": { | |
"name": "CustomerFeedService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/CustomerFeedService?wsdl", | |
"remotingEnabled": true | |
}, | |
"CustomerService": { | |
"name": "CustomerService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/mcm/v201409/CustomerService?wsdl", | |
"remotingEnabled": true | |
}, | |
"CustomerSyncService": { | |
"name": "CustomerSyncService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/ch/v201409/CustomerSyncService?wsdl", | |
"remotingEnabled": true | |
}, | |
"DataService": { | |
"name": "DataService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/DataService?wsdl", | |
"remotingEnabled": true | |
}, | |
"ExperimentService": { | |
"name": "ExperimentService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/ExperimentService?wsdl", | |
"remotingEnabled": true | |
}, | |
"FeedItemService": { | |
"name": "FeedItemService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/FeedItemService?wsdl", | |
"remotingEnabled": true | |
}, | |
"FeedMappingService": { | |
"name": "FeedMappingService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/FeedMappingService?wsdl", | |
"remotingEnabled": true | |
}, | |
"FeedService": { | |
"name": "FeedService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/FeedService?wsdl", | |
"remotingEnabled": true | |
}, | |
"GeoLocationService": { | |
"name": "GeoLocationService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/GeoLocationService?wsdl", | |
"remotingEnabled": true | |
}, | |
"LabelService": { | |
"name": "LabelService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/LabelService?wsdl", | |
"remotingEnabled": true | |
}, | |
"LocationCriterionService": { | |
"name": "LocationCriterionService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/LocationCriterionService?wsdl", | |
"remotingEnabled": true | |
}, | |
"ManagedCustomerService": { | |
"name": "ManagedCustomerService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/mcm/v201409/ManagedCustomerService?wsdl", | |
"remotingEnabled": true | |
}, | |
"MediaService": { | |
"name": "MediaService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/MediaService?wsdl", | |
"remotingEnabled": true | |
}, | |
"MutateJobService": { | |
"name": "MutateJobService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/MutateJobService?wsdl", | |
"remotingEnabled": true | |
}, | |
"OfflineConversionFeedService": { | |
"name": "OfflineConversionFeedService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/OfflineConversionFeedService?wsdl", | |
"remotingEnabled": true | |
}, | |
"ReportDefinitionService": { | |
"name": "ReportDefinitionService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/ReportDefinitionService?wsdl", | |
"remotingEnabled": true | |
}, | |
"SharedCriterionService": { | |
"name": "SharedCriterionService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/SharedCriterionService?wsdl", | |
"remotingEnabled": true | |
}, | |
"SharedSetService": { | |
"name": "SharedSetService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/cm/v201409/SharedSetService?wsdl", | |
"remotingEnabled": true | |
}, | |
"TargetingIdeaService": { | |
"name": "TargetingIdeaService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/o/v201409/TargetingIdeaService?wsdl", | |
"remotingEnabled": true | |
}, | |
"TrafficEstimatorService": { | |
"name": "TrafficEstimatorService", | |
"connector": "soap", | |
"wsdl": "https://adwords.google.com/api/adwords/o/v201409/TrafficEstimatorService?wsdl", | |
"remotingEnabled": true | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var loopback = require('loopback'); | |
var boot = require('loopback-boot'); | |
var app = module.exports = loopback(); | |
// Set up the /favicon.ico | |
app.use(loopback.favicon()); | |
// request pre-processing middleware | |
app.use(loopback.compress()); | |
// -- Add your pre-processing middleware here -- | |
// boot scripts mount components like REST API | |
boot(app, __dirname, function(err){ | |
// -- Mount static files here-- | |
// All static middleware should be registered at the end, as all requests | |
// passing the static middleware are hitting the file system | |
// Example: | |
// var path = require('path'); | |
// app.use(loopback.static(path.resolve(__dirname, '../client'))); | |
// Requests that get this far won't be handled | |
// by any middleware. Convert them into a 404 error | |
// that will be handled later down the chain. | |
app.use(loopback.urlNotFound()); | |
// The ultimate error handler. | |
app.use(loopback.errorHandler()); | |
app.start = function() { | |
// start the web server | |
return app.listen(function() { | |
app.emit('started'); | |
console.log('Web server listening at: %s', app.get('url')); | |
}); | |
}; | |
// start the server if `$ node server.js` | |
if (require.main === module) { | |
app.start(); | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment