{"id":13571777,"url":"https://github.com/chrisleekr/nodejs-vuejs-mysql-boilerplate","last_synced_at":"2025-04-09T23:20:12.988Z","repository":{"id":40366169,"uuid":"220748184","full_name":"chrisleekr/nodejs-vuejs-mysql-boilerplate","owner":"chrisleekr","description":"Node.js (REST API) + Vue.js/Nuxt.js  (Frontend/Backend) + MySQL Boilerplate","archived":false,"fork":false,"pushed_at":"2023-03-02T21:44:41.000Z","size":15341,"stargazers_count":188,"open_issues_count":31,"forks_count":66,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-04-02T16:50:14.950Z","etag":null,"topics":["boilerplate","bootstrapvue","bunyan","cypress","express","express-validator","frontend","jest","jwt","mysql","node-mailer","nodejs","nuxtjs","vue","vue-draggable","vue-router","vuejs","vuelidate","vuex","webpack"],"latest_commit_sha":null,"homepage":"https://nvm-boilerplate.chrislee.kr","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chrisleekr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2019-11-10T05:57:24.000Z","updated_at":"2024-12-30T09:04:36.000Z","dependencies_parsed_at":"2024-01-14T03:49:06.090Z","dependency_job_id":"53cf171a-e394-405a-b8bd-f8bd18fd96e0","html_url":"https://github.com/chrisleekr/nodejs-vuejs-mysql-boilerplate","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisleekr%2Fnodejs-vuejs-mysql-boilerplate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisleekr%2Fnodejs-vuejs-mysql-boilerplate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisleekr%2Fnodejs-vuejs-mysql-boilerplate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chrisleekr%2Fnodejs-vuejs-mysql-boilerplate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chrisleekr","download_url":"https://codeload.github.com/chrisleekr/nodejs-vuejs-mysql-boilerplate/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248126087,"owners_count":21051866,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["boilerplate","bootstrapvue","bunyan","cypress","express","express-validator","frontend","jest","jwt","mysql","node-mailer","nodejs","nuxtjs","vue","vue-draggable","vue-router","vuejs","vuelidate","vuex","webpack"],"created_at":"2024-08-01T14:01:06.122Z","updated_at":"2025-04-09T23:20:12.965Z","avatar_url":"https://github.com/chrisleekr.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# Node.js (REST API) + Vue.js/Nuxt.js (Frontend/Backend) + MySQL Boilerplate\n\nThis is a boilerplate project. The project contains Node.js REST API and frontend/backend developed by Vue.js with\nBootstrapVue.\n\n- API\n  - Node.js, Express, Webpack, Express Validator, JWT, Bunyan, Promise MySQL, Node Mailer, Jest, Supertest, Nodemon, DB\n    migrate\n- Frontend - Nuxt.js\n  - Nuxt.js, Vue.js, Vuex, Vuelidate, BootstrapVue, Jest\n- Frontend - Vue.js\n  - Vue.js, Vuex, Vue Router, Vue Draggable, Vuelidate, BootstrapVue, Jest, Cypress\n- Backend\n  - Vue.js, Vuex, Vue Router, Vuelidate, BootstrapVue, Jest, Cypress\n\n## Demo\n\n| Service            | Endpoint                                                                                                 |\n| ------------------ | -------------------------------------------------------------------------------------------------------- |\n| API                | [https://nvm-boilerplate.chrislee.kr/api/](https://nvm-boilerplate.chrislee.kr/api/)                     |\n| Frontend - Nuxt.js | [https://nvm-boilerplate.chrislee.kr/frontend-nuxt/](https://nvm-boilerplate.chrislee.kr/frontend-nuxt/) |\n| Frontend - Vue.js  | [https://nvm-boilerplate.chrislee.kr/frontend-vue/](https://nvm-boilerplate.chrislee.kr/frontend-vue/)   |\n| Backend            | [https://nvm-boilerplate.chrislee.kr/backend/](https://nvm-boilerplate.chrislee.kr/backend/)             |\n| Mailhog            | [https://nvm-boilerplate.chrislee.kr/mailhog/](https://nvm-boilerplate.chrislee.kr/mailhog/)             |\n\n\u003ca href=\"https://user-images.githubusercontent.com/5715919/70433695-7f57b780-1ad6-11ea-9596-da8e7c651387.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/5715919/70433695-7f57b780-1ad6-11ea-9596-da8e7c651387.jpg\" width=\"18%\"\u003e\u003c/img\u003e\u003c/a\u003e\u003ca href=\"https://user-images.githubusercontent.com/5715919/70433697-7f57b780-1ad6-11ea-8849-6a4f72b89412.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/5715919/70433697-7f57b780-1ad6-11ea-8849-6a4f72b89412.jpg\" width=\"18%\"\u003e\u003c/img\u003e\u003c/a\u003e\u003ca href=\"https://user-images.githubusercontent.com/5715919/70433699-7f57b780-1ad6-11ea-94a1-19d578eaf53d.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/5715919/70433699-7f57b780-1ad6-11ea-94a1-19d578eaf53d.jpg\" width=\"18%\"\u003e\u003c/img\u003e\u003c/a\u003e\u003ca href=\"https://user-images.githubusercontent.com/5715919/70433700-7ff04e00-1ad6-11ea-8f18-68b4a283e829.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/5715919/70433700-7ff04e00-1ad6-11ea-8f18-68b4a283e829.jpg\" width=\"18%\"\u003e\u003c/img\u003e\u003c/a\u003e\u003ca href=\"https://user-images.githubusercontent.com/5715919/70433701-7ff04e00-1ad6-11ea-996e-87dd9cc0b922.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/5715919/70433701-7ff04e00-1ad6-11ea-996e-87dd9cc0b922.jpg\" width=\"18%\"\u003e\u003c/img\u003e\u003c/a\u003e\u003ca href=\"https://user-images.githubusercontent.com/5715919/70433703-7ff04e00-1ad6-11ea-8e8e-6349d66de647.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/5715919/70433703-7ff04e00-1ad6-11ea-8e8e-6349d66de647.jpg\" width=\"18%\"\u003e\u003c/img\u003e\u003c/a\u003e\u003ca href=\"https://user-images.githubusercontent.com/5715919/70433704-8088e480-1ad6-11ea-8e37-380e2fe3a29b.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/5715919/70433704-8088e480-1ad6-11ea-8e37-380e2fe3a29b.jpg\" width=\"18%\"\u003e\u003c/img\u003e\u003c/a\u003e\u003ca href=\"https://user-images.githubusercontent.com/5715919/70433707-8088e480-1ad6-11ea-995f-7298ac177889.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/5715919/70433707-8088e480-1ad6-11ea-995f-7298ac177889.jpg\" width=\"18%\"\u003e\u003c/img\u003e\u003c/a\u003e\u003ca href=\"https://user-images.githubusercontent.com/5715919/70433709-81217b00-1ad6-11ea-82ba-35972dbfaf31.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/5715919/70433709-81217b00-1ad6-11ea-82ba-35972dbfaf31.jpg\" width=\"18%\"\u003e\u003c/img\u003e\u003c/a\u003e\u003ca href=\"https://user-images.githubusercontent.com/5715919/70433710-81217b00-1ad6-11ea-9207-f72419b96217.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/5715919/70433710-81217b00-1ad6-11ea-9207-f72419b96217.jpg\" width=\"18%\"\u003e\u003c/img\u003e\u003c/a\u003e\u003ca href=\"https://user-images.githubusercontent.com/5715919/70433712-81ba1180-1ad6-11ea-81e4-0a408d8382a6.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/5715919/70433712-81ba1180-1ad6-11ea-81e4-0a408d8382a6.jpg\" width=\"18%\"\u003e\u003c/img\u003e\u003c/a\u003e\u003ca href=\"https://user-images.githubusercontent.com/5715919/70433714-8252a800-1ad6-11ea-9a14-c64a2d9a2d2b.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/5715919/70433714-8252a800-1ad6-11ea-9a14-c64a2d9a2d2b.jpg\" width=\"18%\"\u003e\u003c/img\u003e\u003c/a\u003e\u003ca href=\"https://user-images.githubusercontent.com/5715919/70433715-8252a800-1ad6-11ea-93ee-827ebd24ce4f.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/5715919/70433715-8252a800-1ad6-11ea-93ee-827ebd24ce4f.jpg\" width=\"18%\"\u003e\u003c/img\u003e\u003c/a\u003e\u003ca href=\"https://user-images.githubusercontent.com/5715919/70433716-82eb3e80-1ad6-11ea-80de-3418e4c6890e.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/5715919/70433716-82eb3e80-1ad6-11ea-80de-3418e4c6890e.jpg\" width=\"18%\"\u003e\u003c/img\u003e\u003c/a\u003e\u003ca href=\"https://user-images.githubusercontent.com/5715919/70433717-82eb3e80-1ad6-11ea-9664-37c69d0a895f.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/5715919/70433717-82eb3e80-1ad6-11ea-9664-37c69d0a895f.jpg\" width=\"18%\"\u003e\u003c/img\u003e\u003c/a\u003e\u003ca href=\"https://user-images.githubusercontent.com/5715919/70433718-8383d500-1ad6-11ea-96b2-46660dd569db.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/5715919/70433718-8383d500-1ad6-11ea-96b2-46660dd569db.jpg\" width=\"18%\"\u003e\u003c/img\u003e\u003c/a\u003e\u003ca href=\"https://user-images.githubusercontent.com/5715919/70433720-841c6b80-1ad6-11ea-8213-53e01587a930.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/5715919/70433720-841c6b80-1ad6-11ea-8213-53e01587a930.jpg\" width=\"18%\"\u003e\u003c/img\u003e\u003c/a\u003e\u003ca href=\"https://user-images.githubusercontent.com/5715919/70433722-84b50200-1ad6-11ea-8797-bbb75e22986b.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/5715919/70433722-84b50200-1ad6-11ea-8797-bbb75e22986b.jpg\" width=\"18%\"\u003e\u003c/img\u003e\u003c/a\u003e\u003ca href=\"https://user-images.githubusercontent.com/5715919/70433723-84b50200-1ad6-11ea-997d-cda5d001a58f.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/5715919/70433723-84b50200-1ad6-11ea-997d-cda5d001a58f.jpg\" width=\"18%\"\u003e\u003c/img\u003e\u003c/a\u003e\u003ca href=\"https://user-images.githubusercontent.com/5715919/70433726-85e62f00-1ad6-11ea-9228-17e046420915.jpg\" target=\"_blank\"\u003e\n\u003cimg src=\"https://user-images.githubusercontent.com/5715919/70433726-85e62f00-1ad6-11ea-9228-17e046420915.jpg\" width=\"18%\"\u003e\u003c/img\u003e\u003c/a\u003e\n\n## How to start in your local environment\n\n```bash\n$ docker-compose up -d\n```\n\nOnce docker containers are up, then you can access services with below URL.\n\n| Service            | Endpoint                                                         |\n| ------------------ | ---------------------------------------------------------------- |\n| API                | [http://localhost/api](http://localhost/api)                     |\n| Frontend - Nuxt.js | [http://localhost/frontend-nuxt](http://localhost/frontend-nuxt) |\n| Frontend - Vue.js  | [http://localhost/frontend-vue](http://localhost/frontend-vue)   |\n| Backend            | [http://localhost/backend](http://localhost/backend)             |\n| Mailhog            | [http://localhost/mailhog](http://localhost/mailhog)             |\n| MySQL              | localhost:3307                                                   |\n\nThere are three users in the database initially. You can use them to login Frontend/Backend.\n\n| Service  | Username | Email                   | Password |\n| -------- | -------- | ----------------------- | -------- |\n| Backend  | admin    | admin@boilerplate.local | 123456   |\n| Backend  | staff    | staff@boilerplate.local | 123456   |\n| Frontend | user     | user@boilerplate.local  | 123456   |\n\n### API\n\nAPI docker container will be launched as development mode with nodemon. However, it won't detect any changes unless\nuncomment volumes.\n\nTo enable live change for the API, simply uncomment following lines in `docker-compose.yml`\n\n```text\n  volumes:\n    - ./api:/srv\n```\n\nPlease make sure you run `npm install` in the `api` folder.\n\n### Frontend \u0026 Backend\n\nCurrently, Frontend (Nuxt.js/Vue.js) and Backend docker container is configured to serve production mode due to the\nlimitation of setting development environment of Vue.js in sub directory.\n\nIf you want to have Hot Reload feature, then you should launch the Frontend separately by `npm run serve`.\n\n```bash\ncd frontend-vue\nnpm run serve\n\n# or\n\ncd frontend-nuxt\nnpm run dev\n\n# or\n\ncd backend\nnpm run serve\n```\n\nThen access Frontend - Nuxt.js with `http://localhost:3000`, Frontend - Vue.js with `http://localhost:8080` and Backend\nwith `http://localhost:8081` via your browser.\n\n### Mailhog\n\nCurrently, API is configured to point Mailhog to send an email. Any email sent by the API can be viewed in Mailhog web\ninterface.\n\nAccess via your browser `http://localhost/mailhog`\n\n### MySQL\n\nMySQL port is mapped to 3307.\n\n## Features\n\n- API\n\n  - Database migration\n\n- Frontend - Vue.js\n\n  - User registration\n  - Confirm user email address\n  - Reset user password\n  - User login/logout\n  - Manage todo\n  - Manage account information\n\n- Frontend - Nuxt.js\n\n  - Support all features that \"Frontend - Vue.js\"\n  - Server Side Render (SSR)\n\n- Backend\n\n  - Staff login/logout\n  - Staff permission management\n  - List todo\n  - Manage users\n  - Manage staffs\n  - Manage settings\n\n- CI/CD\n  - Gitlab: .gitlab-ci.yml\n  - Github: .github/workflows/main.yml\n\n## Todo\n\n- [x] Unit tests\n- [x] E2E tests\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchrisleekr%2Fnodejs-vuejs-mysql-boilerplate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchrisleekr%2Fnodejs-vuejs-mysql-boilerplate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchrisleekr%2Fnodejs-vuejs-mysql-boilerplate/lists"}