Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Introduction

...

The below shows the difference between the config file of a service written without the composer, and the index file of a service written with the composer.

Config.js

...

Code Block
languagejs
titleStandard Config.js
linenumberstrue
module.exports = {
	type: 'service',
	prerequisites: {
		cpu: '',
		memory: ''
	},
	serviceVersion: 1,
	serviceName: "shoppingCart",
	serviceGroup: "My Commerce Project",
	requestTimeout: 30,
	requestTimeoutRenewal: 5,
	servicePort: 4021,
	extKeyRequired: false,
	session: true,
	errors: {
		400: "Failed to connect to Database!",
		401: "Invalid User Id Provided",
		402: "Error fetching Entries!",
		407: "Error Loading Model!"
	},
	schema: {
		"commonFields": {
			"userId": {
				"source": ['query.userId'],
				"required": true,
				"validation": {
					"type": "string"
				}
			}
		},

		"/getCart": {
			"_apiInfo": {
				"l": "Get Cart"
			},
			"commonFields": ["userId"]
		},
		"/setCart": {
			"_apiInfo": {
				"l" : "Set Cart"
			},
			"commonFields": ["userId"],
			"items": {
				"source": ['body.items'],
				"required": true,
				"validation": {
					"type": "array",
					"items": {
						//.....
					}
				}
			}
		},
		"/emptyCart": {
			"_apiInfo": {
				"l" : "Empty Cart"
			},
			"commonFields": ["userId"]
		}
	}
};
Code Block
languagejs
titleConfig.js Used by Composer
linenumberstrue
module.exports = {
	type: 'service',
	prerequisites: {
		cpu: '',
		memory: ''
	},
	serviceVersion: 1,
	serviceName: "shoppingCart",
	serviceGroup: "My Commerce Project",
	requestTimeout: 30,
	requestTimeoutRenewal: 5,
	servicePort: 4021,
	extKeyRequired: false,
	session: true,
	errors: {
		400: "Failed to connect to Database!",
		401: "Invalid User Id Provided",
		402: "Error fetching Entries!",
		407: "Error Loading Model!"
	},
	schema: {
		"commonFields": {
			"userId": {
				"source": ['query.userId'],
				"required": true,
				"validation": {
					"type": "string"
				}
			}
		},

		"/getCart": {
			"_apiInfo": {
				"l": "Get Cart"
			},
			"mw": __dirname + "/lib/mw/getCart.js",
			"imfv": {
				"commonFields": ["userId"]
			}
		},
		"/setCart": {
			"_apiInfo": {
				"l" : "Set Cart"
			},
			"mw": __dirname + "/lib/mw/setCart.js",
			"imfv": {
				"commonFields": ["userId"],
				"custom": {
					"items": {
						"source": ['body.items'],
						"required": true,
						"validation": {
							"type": "array",
							"items": {
								//.....
							}
						}
					}
				}
			}
		},
		"/emptyCart": {
			"_apiInfo": {
				"l" : "Empty Cart"
			},
			"mw": __dirname + "/lib/mw/emptyCart.js",
			"imfv": {
				"commonFields": ["userId"]
			}
		}
	},
	dbs: [
		{
			prefix: "test_",
			name: "myDatabase",
			model: "mongo",
			multitenant: false
		}
	]
};

...

Finally the composer asks you to add imfv in each API and inside it put the inputs configuration instead of using the standard SOAJS way.


Databases

...

The config.js that is passed to the composer contains a new entry called dbs.This entry is not required if you were to build a normal SOAJS microservice or daemon.

...