diff --git a/README.md b/README.md index 89db77b6..becc5ef1 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,28 @@ app.listen(1337, function() { ### Standalone Parse Server -Parse Server can also run as a standalone API server. The standalone Parse Server can be configured using [environment variables](#configuration). To start the server, just run `npm start`. +Parse Server can also run as a standalone API server. +You can configure Parse Server with a configuration file, arguments and environment variables. + +To start the server: + +`npm start -- --appId MYAPP --masterKey MASTER_KEY`. + +To get more help for running the parse-server standalone, you can run: + +`$ npm start -- --help` + +The standalone API server supports loading a configuration file in JSON format: + +`$ npm start -- path/to/your/config.json` + +The default port is 1337, to use a different port set the PORT environment variable: + +`$ PORT=8080 npm start -- path/to/your/config.json` + +The standalone Parse Server can be configured using [environment variables](#configuration). + +Please refer to the [configuration section](#configuration) or help; You can also install Parse Server globally: diff --git a/package.json b/package.json index fd348a62..e74b0f5e 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "babel-runtime": "^6.5.0", "bcrypt-nodejs": "0.0.3", "body-parser": "^1.14.2", + "colors": "^1.1.2", "commander": "^2.9.0", "deepcopy": "^0.6.1", "express": "^4.13.4", diff --git a/src/cli/cli-definitions.js b/src/cli/cli-definitions.js index a560178c..5d93b429 100644 --- a/src/cli/cli-definitions.js +++ b/src/cli/cli-definitions.js @@ -11,7 +11,8 @@ module.exports = { }, "serverURL": { env: "PARSE_SERVER_URL", - help: "URL to your parse server with http:// or https://" + help: "URL to your parse server with http:// or https://", + required: true }, "databaseURI": { env: "PARSE_SERVER_DATABASE_URI", @@ -65,7 +66,7 @@ module.exports = { }, "enableAnonymousUsers": { env: "PARSE_SERVER_ENABLE_ANON_USERS", - help: "Enable (or disable) anon users, enabled by default", + help: "Enable (or disable) anon users, defaults to true", action: function(opt) { if (opt == "true" || opt == "1") { return true; @@ -75,7 +76,8 @@ module.exports = { }, "mountPath": { env: "PARSE_SERVER_MOUNT_PATH", - help: "Mount path for the server, defaults to /" + help: "Mount path for the server, defaults to /parse", + default: "/parse" }, "databaseAdapter": { env: "PARSE_SERVER_DATABASE_ADAPTER", diff --git a/src/cli/parse-server.js b/src/cli/parse-server.js index 75c567ba..1d5fb7b1 100755 --- a/src/cli/parse-server.js +++ b/src/cli/parse-server.js @@ -3,6 +3,7 @@ var express = require('express'); var ParseServer = require("../index").ParseServer; var definitions = require('./cli-definitions'); var program = require('./utils/commander'); +var colors = require('colors'); program.loadDefinitions(definitions); @@ -19,15 +20,15 @@ program.on('--help', function(){ console.log(' Usage with npm start'); console.log(''); console.log(' $ npm start -- path/to/config.json'); - console.log(' $ npm start -- --appId APP_ID --masterKey MASTER_KEY'); - console.log(' $ npm start -- --appId APP_ID --masterKey MASTER_KEY'); + console.log(' $ npm start -- --appId APP_ID --masterKey MASTER_KEY --serverURL serverURL'); + console.log(' $ npm start -- --appId APP_ID --masterKey MASTER_KEY --serverURL serverURL'); console.log(''); console.log(''); console.log(' Usage:'); console.log(''); console.log(' $ parse-server path/to/config.json'); - console.log(' $ parse-server -- --appId APP_ID --masterKey MASTER_KEY'); - console.log(' $ parse-server -- --appId APP_ID --masterKey MASTER_KEY'); + console.log(' $ parse-server -- --appId APP_ID --masterKey MASTER_KEY --serverURL serverURL'); + console.log(' $ parse-server -- --appId APP_ID --masterKey MASTER_KEY --serverURL serverURL'); console.log(''); }); @@ -40,6 +41,14 @@ if (program.args.length > 0 ) { jsonPath = path.resolve(jsonPath); options = require(jsonPath); console.log(`Configuation loaded from ${jsonPath}`) +} + +if (!program.appId || !program.masterKey || !program.serverURL) { + program.outputHelp(); + console.error(""); + console.error(colors.red("ERROR: appId, masterKey and serverURL are required")); + console.error(""); + process.exit(1); } var options = Object.keys(definitions).reduce(function (options, key) { @@ -49,8 +58,6 @@ var options = Object.keys(definitions).reduce(function (options, key) { return options; }, options); -options.mountPath = options.mountPath || '/'; - var app = express(); var api = new ParseServer(options); app.use(options.mountPath, api); diff --git a/src/cli/utils/commander.js b/src/cli/utils/commander.js index bc650b13..7fb68107 100644 --- a/src/cli/utils/commander.js +++ b/src/cli/utils/commander.js @@ -2,7 +2,7 @@ var program = require('commander'); var _definitions; var _reverseDefinitions; - +var _defaults; program.loadDefinitions = function(definitions) { _definitions = definitions; Object.keys(definitions).reduce(function(program, opt){ @@ -16,7 +16,12 @@ program.loadDefinitions = function(definitions) { } return program.option(`--${opt} [${opt}]`) }, program); - + _defaults = Object.keys(definitions).reduce(function(defs, opt) { + if(_definitions[opt].default) { + defs[opt] = _definitions[opt].default; + } + return defs; + }, {}); _reverseDefinitions = Object.keys(definitions).reduce(function(object, key){ let value = definitions[key]; if (typeof value == "object") { @@ -65,6 +70,11 @@ program.parse = function(args, env) { program[key] = envOptions[key]; } }); + Object.keys(_defaults).forEach(function(key){ + if (!program[key]) { + program[key] = _defaults[key]; + } + }); } module.exports = program;