diff --git a/app.js b/app.js index df328e3..ab769e4 100644 --- a/app.js +++ b/app.js @@ -4,14 +4,16 @@ const logger = require('morgan') const rateLimit = require('express-rate-limit') const app = express() const nunjucks = require('nunjucks') -const helmet = require('helmet'); +const helmet = require('helmet') +const path = require('path') +const messages = require(path.join(__dirname, 'config', 'messages')) app.use(helmet()); const limiter = rateLimit({ windowMs: 15 * 60 * 1000, max: 100, - message: 'Too many requests from this IP, please try again after 15 minutes', + message: messages.errors.rateLimitExceeded, standardHeaders: true, legacyHeaders: false, }) diff --git a/bin/www b/bin/www index 2b196de..e0e061e 100644 --- a/bin/www +++ b/bin/www @@ -10,6 +10,7 @@ var path = require('path') var app = require('../app') var env = process.env.NODE_ENV || 'development' var config = require(path.join('..', 'config', env)) +var messages = require(path.join('..', 'config', 'messages')) /** * Get port from environment and store in Express. @@ -68,11 +69,11 @@ function onError (error) { // handle specific listen errors with friendly messages switch (error.code) { case 'EACCES': - console.error(bind + ' requires elevated privileges') + console.error(messages.errors.portElevatedPrivileges(bind)) process.exit(1) break case 'EADDRINUSE': - console.error(bind + ' is already in use'); + console.error(messages.errors.portInUse(bind)) process.exit(1) break default: diff --git a/config/messages.js b/config/messages.js new file mode 100644 index 0000000..9160299 --- /dev/null +++ b/config/messages.js @@ -0,0 +1,32 @@ +/** + * Centralized messages for the application + * Includes error messages, success messages, and informational messages + */ + +module.exports = { + // Success Messages + success: { + contentstackConnected: 'Contentstack connection established.', + }, + + // Error Messages + errors: { + // Server errors + portElevatedPrivileges: (bind) => `Error: ${bind} requires elevated privileges. Try running with sudo or use a port above 1024.`, + portInUse: (bind) => `Error: ${bind} is already in use. Please stop the other process or use a different port.`, + + // Rate limiting + rateLimitExceeded: 'Too many requests from this IP, please try again after 15 minutes.', + + // Generic errors + notFound: 'The requested resource was not found.', + internalServerError: 'An internal server error occurred.', + }, + + // Informational Messages + info: { + serverStarting: (port) => `Server starting on port ${port}`, + serverListening: (bind) => `Listening on ${bind}`, + } +} + diff --git a/models/contentstack.js b/models/contentstack.js index 4fc01cd..4cc076b 100644 --- a/models/contentstack.js +++ b/models/contentstack.js @@ -1,12 +1,13 @@ var path = require('path') var env = process.env.NODE_ENV || 'development' var config = require(path.join('..', 'config', env)) +var messages = require(path.join('..', 'config', 'messages')) const Contentstack = require(config.sdk).Contentstack const Stack = Contentstack.Stack(config) Stack.connect(config.contentStore).then(() => { - console.log("Connected") + console.log(messages.success.contentstackConnected) }).catch(console.error) diff --git a/package-lock.json b/package-lock.json index 912d27c..fc18800 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "datasync-nodejs-sdk-boilerplate", - "version": "0.0.6", + "version": "0.0.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "datasync-nodejs-sdk-boilerplate", - "version": "0.0.6", + "version": "0.0.7", "license": "MIT", "dependencies": { "@contentstack/datasync-filesystem-sdk": "^1.0.17", @@ -18,7 +18,7 @@ "express": "^4.21.2", "express-rate-limit": "^7.1.5", "http-errors": "~2.0.0", - "morgan": "~1.10.0", + "morgan": "~1.10.1", "nunjucks": "^3.2.4", "path": "^0.12.7" }, @@ -4698,16 +4698,16 @@ } }, "node_modules/morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.1.tgz", + "integrity": "sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==", "license": "MIT", "dependencies": { "basic-auth": "~2.0.1", "debug": "2.6.9", "depd": "~2.0.0", "on-finished": "~2.3.0", - "on-headers": "~1.0.2" + "on-headers": "~1.1.0" }, "engines": { "node": ">= 0.8.0" @@ -4877,9 +4877,9 @@ } }, "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", "license": "MIT", "engines": { "node": ">= 0.8" diff --git a/package.json b/package.json index ef55888..a0bb5c9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "datasync-nodejs-sdk-boilerplate", - "version": "0.0.6", + "version": "0.0.7", "private": true, "scripts": { "start": "node ./bin/www", @@ -16,7 +16,7 @@ "express": "^4.21.2", "express-rate-limit": "^7.1.5", "http-errors": "~2.0.0", - "morgan": "~1.10.0", + "morgan": "~1.10.1", "nunjucks": "^3.2.4", "path": "^0.12.7" },