{"id":41069575,"url":"https://github.com/kukko/web-wombat","last_synced_at":"2026-01-22T13:01:03.932Z","repository":{"id":34115847,"uuid":"170109087","full_name":"kukko/web-wombat","owner":"kukko","description":"Framework for web services with NodeJS.","archived":false,"fork":false,"pushed_at":"2023-02-04T00:34:07.000Z","size":1674,"stargazers_count":7,"open_issues_count":18,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-09T18:58:25.397Z","etag":null,"topics":["nodejs","nodejs-framework"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kukko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-02-11T10:22:24.000Z","updated_at":"2023-11-15T21:37:46.000Z","dependencies_parsed_at":"2023-01-15T04:43:03.791Z","dependency_job_id":null,"html_url":"https://github.com/kukko/web-wombat","commit_stats":null,"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/kukko/web-wombat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kukko%2Fweb-wombat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kukko%2Fweb-wombat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kukko%2Fweb-wombat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kukko%2Fweb-wombat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kukko","download_url":"https://codeload.github.com/kukko/web-wombat/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kukko%2Fweb-wombat/sbom","scorecard":{"id":573160,"data":{"date":"2025-08-11","repo":{"name":"github.com/kukko/web-wombat","commit":"1f3ceab243bd8cac9191aaae8032673bb18ac260"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.2,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/23 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/coverals.yml:1","Warn: no topLevel permission defined: .github/workflows/nodejs.yml:1","Warn: no topLevel permission defined: .github/workflows/npmpublish.yml:1","Warn: no topLevel permission defined: .github/workflows/npmupdate.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":1,"reason":"dependency not pinned by hash detected -- score normalized to 1","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/coverals.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/kukko/web-wombat/coverals.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/coverals.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/kukko/web-wombat/coverals.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/coverals.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/kukko/web-wombat/coverals.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/nodejs.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/kukko/web-wombat/nodejs.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/nodejs.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/kukko/web-wombat/nodejs.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npmpublish.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/kukko/web-wombat/npmpublish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npmpublish.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/kukko/web-wombat/npmpublish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npmpublish.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/kukko/web-wombat/npmpublish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npmpublish.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/kukko/web-wombat/npmpublish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/npmupdate.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/kukko/web-wombat/npmupdate.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/npmupdate.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/kukko/web-wombat/npmupdate.yml/master?enable=pin","Warn: npmCommand not pinned by hash: .github/workflows/coverals.yml:22","Warn: npmCommand not pinned by hash: .github/workflows/nodejs.yml:22","Info:   0 out of   9 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   1 out of   3 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 7 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"45 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-4gmj-3p3h-gm8h","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-4q6p-r6v2-jvc5","Warn: Project is vulnerable to: GHSA-ww39-953v-wcq6","Warn: Project is vulnerable to: GHSA-765h-qjxv-5f44","Warn: Project is vulnerable to: GHSA-f2jv-r9rf-7988","Warn: Project is vulnerable to: GHSA-qqgx-2p2h-9c37","Warn: Project is vulnerable to: GHSA-896r-f27r-55mw","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-8cf7-32gw-wr33","Warn: Project is vulnerable to: GHSA-hjrf-2m68-5959","Warn: Project is vulnerable to: GHSA-qwph-4952-7xr6","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-vxvm-qww3-2fh7","Warn: Project is vulnerable to: GHSA-qrpm-p2h7-hrv2","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-rp65-9cf3-cjxr","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-g6ww-v8xp-vmwg","Warn: Project is vulnerable to: GHSA-p493-635q-r6gr","Warn: Project is vulnerable to: GHSA-3965-hpx2-q597","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-3jfq-g458-7qm9","Warn: Project is vulnerable to: GHSA-r628-mhmh-qjhw","Warn: Project is vulnerable to: GHSA-9r2w-394v-53qc","Warn: Project is vulnerable to: GHSA-5955-9wpr-37jh","Warn: Project is vulnerable to: GHSA-qq89-hq3f-393p","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-c4w7-xm78-47vh"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T16:53:56.100Z","repository_id":34115847,"created_at":"2025-08-20T16:53:56.100Z","updated_at":"2025-08-20T16:53:56.100Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28663774,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"online","status_checked_at":"2026-01-22T02:00:07.137Z","response_time":144,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nodejs","nodejs-framework"],"created_at":"2026-01-22T13:00:29.776Z","updated_at":"2026-01-22T13:01:03.887Z","avatar_url":"https://github.com/kukko.png","language":"JavaScript","readme":"# web-wombat\nFramework for web services with NodeJS.\n\n[![Build Status](https://travis-ci.org/kukko/web-wombat.svg?branch=master)](https://travis-ci.org/kukko/web-wombat)\n\nWith web-wombat, you can easily set up a simple webserver in 1-2 minutes. You can also set up a WebSocket server in one minute.\n\nFor documentation see the GitHub pages site of project on the following link.\n[https://kukko.github.io/web-wombat/](https://kukko.github.io/web-wombat/)\n\n## Create new project with web-wombat\n```bash\nnpm install web-wombat -g\nweb-wombat init foo\ncd foo\nnode index.js\n```\n\nNote: You have to generate keys to handle SSL connections in the `\u003cAPP_FOLDER\u003e/config/secureKey/` folder in `key.pem` and `certificate.pem`. But you can create project which do not listen for secure connections by adding `--unsecure` switch to the end of init command. It just adds an additional line to the `\u003cAPP_FOLDER\u003e/index.js` which disables creation of HTTPS server.\n\nAnd you have a running web-server. After that you can start creating routes, controllers, and collections to store data in database.\n\nNote: You also can disable database by adding `--without-database` switch to the end of init command. It just adds an additional line to the `\u003cAPP_FOLDER\u003e/index.js` which disables connection to database.\n\nYou can easily add web-wombat to an already existing project:\n```bash\nnpm install web-wombat --save\n```\n\nYou can create a controller with the following command:\n```\nweb-wombat create controller foo\n```\n\nYou can create a websocket controller with the following command:\n```\nweb-wombat create websocket-controller foo\n```\n\nYou can create a collection with the following command:\n```\nweb-wombat create collection foo\n```\n\n## Starting a web server with WebWombat\nAfter you successfully installed `WebWombat`, you can easily start a web server.\n```javascript\nlet { WombatServer } = require('web-wombat');\n\nWombatServer.init();\n```\n\nBy default, `WebWombat` accepts secure connections, but it requires SSL certificate's private key and certification to be in `config/secureKey` folder in `key.pem` and `certificate.pem` files. If for some reasons you don't want to use secure connections, you can easily turn this off with the `setUnsecure` method of `WombatServer` class, before calling the `init` method.\n\n```javascript\nlet { WombatServer } = require('web-wombat');\n\nWombatServer.setUnsecure().init();\n```\n\nBasically `WebWombat` tries to load the database configuration and connect to the database, but you can turn this behavior off with calling the `static` `withoutDatabase` method on the `WombatServer` class.\n\nHere is an example:\n```javascript\nlet { WombatServer } = require('web-wombat');\n\nWombatServer.withoutDatabase().setRoutes(require('./routes/routes.js')).init();\n```\n\nBasically `WebWombat` is listening on `port 8888`, but you can override this with the `static` `setPort` method.\n\nExample to set port for listening:\n```javascript\nlet { WombatServer } = require('web-wombat');\n\nWombatServer.setPort(1222).setRoutes(require('./routes/routes.js')).init();\n```\n\n## Connect to database\nYou can easily connect to a MongoDB database (In the future there will be other database connectors.), but it's not mandatory.\n```bash\nmkdir config\ncp node_modules/web-wombat/src/config/example-db.js config/db.js\nmkdir collections\n```\nAfter this, you just need to fill in the parameters in the `config/db.js` file and WebWombat will automatically connect to the database.\nWhen connecting to the database, WebWombat will try to create collections which you created in the `collections` folder. A collection must extend the `BaseCollection` class and must implement the `name` method. The `name` method returns a `string` which will be the collection's name in the database.\n\n## Create routes\nIf you run all the commands listed at the Installation section, you have a file at `routes/routes.js` path. In that file, there is the requires required to create routes.\nThe file contents are the following:\n```javascript\nlet { Route, MiddlewareProvider } = require('web-wombat');\n\nmodule.exports=[\n];\n```\n\nYou can create routes for specific request methods, like `GET`, `POST`, `PUT`, `UPDATE` and `DELETE`.\n\nHere are some examples for the different methods.\n\nGET:\n```javascript\nRoute.get('/', require('../controllers/HomeController/HomeController.js'))\n```\nPOST:\n```javascript\nRoute.post('/', require('../controllers/HomeController/HomeController.js'))\n```\nPUT:\n```javascript\nRoute.put('/', require('../controllers/HomeController/HomeController.js'))\n```\nUPDATE:\n```javascript\nRoute.update('/', require('../controllers/HomeController/HomeController.js'))\n```\nDELETE:\n```javascript\nRoute.delete('/', require('../controllers/HomeController/HomeController.js'))\n```\n\nIn one controller, you can specify any method to serve a request and multiple routes can point to the same controller and to the same method, or to the same controller, but different methods. As the third parameter of the above methods, you can specify a method name, which will serve the requests. If this parameter isn't specified, then the controller's `serve` method will handle the request to the route.\n\nHere is an example:\n```javascript\nRoute.get('/profile', require('../controllers/UserController/UserController.js'), 'showSelf')\n```\n\nYou can add middlewares to be run specific for each route, by specifying an `array` as the fourth parameter, for the methods above. The specified middlewares run synchronously after each other, like they are ordered in the array.\n\nRoute with middlewares:\n```javascript\nRoute.get('/profile', require('../controllers/UserController/UserController.js'), 'showSelf', [\n\tMiddlewareProvider.getMiddleware('JwtAuthenticationMiddleware')\n])\n```\n\n### WebSocket\nAnd you can create websocket servers with `WebWombat`. For this, you need to specify a route, with the `Route` class's `websocket` method.\n\nHere is an example:\nSpecify route:\n```javascript\nRoute.websocket('/', require('./controllers/WebSocketTestController/WebSocketTestController.js'))\n```\nCreate controller for websocket:\n```javascript\nlet { WebSocketController } = require('../../../../index.js');\n\nclass WebSocketTestController extends WebSocketController{\n\tonOpen(){\n\t\tconsole.log('Connection opened!');\n\t}\n\tonMessage(message){\n\t\tconsole.log('Message received: ' + message);\n\t}\n\tonClose(){\n\t\tconsole.log('Server: connection closed!');\n\t}\n\tonError(error){\n\t\tconsole.log('Error occured!');\n\t\tconsole.log(error);\n\t}\n}\n\nmodule.exports = WebSocketTestController;\n```\n\n## Available classes\n*These are just those classes and their methods which is accessible from outside of the class and you can do something with them, without the deeper knowledge of the classes.*\n### WombatServer\n#### WombatServer.init(\\[function callback])\nInitialize the `WombatServer` to listen on a port for requests.\n\n**callback:**\nIt's a function which will be called after the `WombatServer` started listening.\n#### WombatServer.setUnsecure()\nDisables the listening for secure connections. Must be called before init method. Basically `WombatServer` listening for secure connections too.\n#### WombatServer.setSecure()\nEnables the listening for secure connections. Must be called before init method. Basically `WombatServer` listening for secure connections too. Calling this method is only required if you previously called `setUnsecure` method.\n#### WombatServer.withDatabase()\nConfigure `WombatServer` to load the database configuration and connect to the database on startup.\n#### WombatServer.withoutDatabase()\nConfigure `WombatServer` to not try to load the database configuration and don't try to connect to database on startup.\n#### WombatServer.setPort(mixed port)\nSet the port where the WombatServer will listen for requests.\n\n**port:**\nThe port where the `WombatServer` will listen for requests.\n#### WombatServer.setRoutes(Route[] routes)\nSet the routes, which will be redirected to Controllers.\n\n**routes:**\nAn array of `Route` instances.\n#### WombatServer.setSubfolder(string subfolder)\nYou can set a path where the `WombatServer` and the dependant classes find the resources relatively to the file, which have been started by `node`.\n\n**subfolder:**\nA relative path where the required resources can be found relatively to the running script file.\n\n### BaseController\nThis is the class which must be the parent class of each controller.\n#### BaseController.view(string filePath, object options, \\[boolean writeToResponse = true, boolean endResponse = true])\n**filePath:**\nRoute to the view, in the `resources/views` folder.\n\n**options:**\nAn object with the variables which will be accessible in the view file.\n\n**writeToResponse:**\nIf this parameter is `true`, the controller will write the builded template to the ServerResponse, else the controller will return a promise which's then branch will receive the builded output as first parameter.\n\n**endResponse:**\nIf this parameter is `true`, the controller will end the response after it's writed the builded template to it. If the `writeToResponse` parameter is `false`, then this parameter will be ignored.\n#### BaseController.getMiddleware(string name)\nThis method will return the request middleware class, not an instance of the class. First this will find the middleware in the `web-wombat` module folder, after that in the projects `middlewares` folder.\n\n**name:**\nThe name of the required `middleware` class.\n\n### WebSocketController\nThis is the class which must be the parent class of each WebSocket controller. The following methods called automatically by this class and the classes which have been extends this parent class, just need to implement these classes. None of them are required to override, just optional.\n#### WebSocketController.onOpen()\nCalled when a client have been connected.\n#### WebSocketController.onMessage(string message)\nCalled when a client sent a message to the server.\n\n**message:**\nContains the message which the client have been sent to the server.\n#### WebSocketController.onClose()\nCalled when a client have been disconnected from the server.\n#### WebSocketController.onError(Error error)\nCalled when an error occured in the connection.\n\n**error:**\nContains the error which is occured in the WebSocket connection.\n#### WebSocketController.send(mixed message)\nSends the specified message to the connected user.\n\n**message:**\nThe message to be sended to the client connected to this controller.\n#### WebSocketController.sendTo(string uuid, mixed message)\nSend the provided message to the client identified by the specified uuid.\n\n**uuid:**\nThe uuid of the client which is the target of the provided message.\n\n**message:**\nThe message to be sended to the client with the provided uuid.\n#### WebSocketController.broadcast(mixed message)\nSends the provided message to all connected clients.\n\n**message:**\nThe message to be sended to all connected clients.\n\n#### WebSocketController.getSocketTag()\nIf you have two controllers which have extends the `WebSocketController` class they shouldn't have the same name.\n\nIf you override it you should be cautious how two class which extends the `WebSocketController` shouldn't return the same value from this method and they don't have the same name.\n\nReturns the tag of the WebSocket controller to be able to make more WebSocket controller in one application. The client's will be grouped by the tag returned by this method. By default it's return the name of the controller class. You shouldn't override this method.\n\n### ViewProvider\nThis is the class through which you can build views.\n#### ViewProvider.setSubfolder(string subfolder)\nYou can set a path where the `ViewProvider` can find the resources relatively to the file, which have been started by `node`.\n\n**subfolder:**\nA relative path where the required resources can be found relatively to the running script file.","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkukko%2Fweb-wombat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkukko%2Fweb-wombat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkukko%2Fweb-wombat/lists"}