{"id":19447089,"url":"https://github.com/stacktape/starter-expressjs-api-mongo-db","last_synced_at":"2026-06-14T08:31:40.128Z","repository":{"id":246214290,"uuid":"820434291","full_name":"stacktape/starter-expressjs-api-mongo-db","owner":"stacktape","description":"Stacktape starter project","archived":false,"fork":false,"pushed_at":"2026-02-04T16:37:27.000Z","size":7,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-02-05T03:59:50.854Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://stacktape.com","language":"TypeScript","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/stacktape.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-26T13:08:57.000Z","updated_at":"2026-02-04T16:41:04.000Z","dependencies_parsed_at":"2024-06-26T16:09:35.365Z","dependency_job_id":"e7f18393-9405-4b26-ae61-592cb02e7b5d","html_url":"https://github.com/stacktape/starter-expressjs-api-mongo-db","commit_stats":null,"previous_names":["stacktape/starter-expressjs-api-mongo-db"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/stacktape/starter-expressjs-api-mongo-db","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stacktape%2Fstarter-expressjs-api-mongo-db","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stacktape%2Fstarter-expressjs-api-mongo-db/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stacktape%2Fstarter-expressjs-api-mongo-db/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stacktape%2Fstarter-expressjs-api-mongo-db/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stacktape","download_url":"https://codeload.github.com/stacktape/starter-expressjs-api-mongo-db/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stacktape%2Fstarter-expressjs-api-mongo-db/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34315072,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-14T02:00:07.365Z","response_time":62,"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":[],"created_at":"2024-11-10T16:16:26.009Z","updated_at":"2026-06-14T08:31:40.122Z","avatar_url":"https://github.com/stacktape.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Express.js API with MongoDb\n\n\u003e [!TIP]\n\u003e To deploy this project using **GUI-based flow**, navigate to [console](https://console.stacktape.com/create-new-project/git-project-using-console?name=my-stacktape-app\u0026repositoryType=public\u0026repositoryUrl=https://github.com/stacktape/starter-expressjs-api-mongo-db)\n\n- Simple Webservice-based HTTP API.\n- The application runs in a [Lambda function](https://docs.stacktape.com/compute-resources/lambda-functions/) and uses\n  [MongoDb Atlas cluster](https://docs.stacktape.com/3rd-party-resources/mongo-db-atlas-clusters/) to store the data. To\n  simplify the database access, this project uses [Mongoose ORM](https://mongoosejs.com/).\n- This project includes a pre-configured [stacktape.yml configuration](stacktape.yml).\nThe configured infrastructure is described in the [stack description section](#stack-description)\n\n## Prerequisites\n\n1. **AWS account**. If you don't have one, [create new account here](https://portal.aws.amazon.com/billing/signup).\n\n2. **Stacktape account**. If you don't have one, [create new account here](https://console.stacktape.com/sign-up).\n\n3. **Stacktape installed**.\n\n  \u003cdetails\u003e\n  \u003csummary\u003eInstall on Windows (Powershell)\u003c/summary\u003e\n\n  ```bash\n  iwr https://installs.stacktape.com/windows.ps1 -useb | iex\n  ```\n\n  \u003c/details\u003e\n  \u003cdetails\u003e\n  \u003csummary\u003eInstall on Linux\u003c/summary\u003e\n\n  ```bash\n  curl -L https://installs.stacktape.com/linux.sh | sh\n  ```\n\n  \u003c/details\u003e\n  \u003cdetails\u003e\n  \u003csummary\u003eInstall on MacOS\u003c/summary\u003e\n\n  ```bash\n  curl -L https://installs.stacktape.com/macos.sh | sh\n  ```\n\n  \u003c/details\u003e\n  \u003cdetails\u003e\n  \u003csummary\u003eInstall on MacOS ARM (Apple silicon)\u003c/summary\u003e\n\n  ```bash\n  curl -L https://installs.stacktape.com/macos-arm.sh | sh\n  ```\n\n  \u003c/details\u003e\n\n4. **MongoDb Atlas account**. To create one, refer to our [step-by-step guide](https://docs.stacktape.com/user-guides/mongo-db-atlas-credentials/).\n\n\n## 1. Generate your project\nTo initialize the project, use\n\n```bash\nstacktape init --starterId expressjs-api-mongo-db\n```\n\n## 2. Before deploy\n- Fill in your MongoDb Atlas credentials in the `providerConfig.mongoDbAtlas` section of the stacktape.yml config file. To learn how to get your API keys and organization ID, refer to [MongoDB Atlas tutorial](https://docs.atlas.mongodb.com/configure-api-access/#std-label-atlas-prog-api-key).\n\n## 3. Deploy your stack\n\nThe deployment will take ~5-15 minutes. Subsequent deploys will be significantly faster.\n\n\u003cdetails\u003e\n\u003csummary\u003eDeploy from local machine\u003c/summary\u003e\n\n\u003cbr /\u003e\n\nThe deployment from local machine will build and deploy the application from your system. This means you also need to have:\n- Docker. To install Docker on your system, you can follow [this guide](https://docs.docker.com/get-docker/).- Node.js installed.\n\n\u003cbr /\u003e\n\nTo perform the deployment, use the following command:\n\n```bash\nstacktape deploy --projectName \u003c\u003cproject-name\u003e\u003e --stage \u003c\u003cstage\u003e\u003e --region \u003c\u003cregion\u003e\u003e\n```\n\n`stage` is an arbitrary name of your environment (for example **staging**, **production** or **dev-john**)\n\n`region` is the AWS region, where your stack will be deployed to. All the available regions are listed below.\n\n`projectName` is the name of your project. You can create it in the console or interactively using CLI.\n\n\u003cbr /\u003e\n\n| Region name \u0026 Location     | code           |\n  | -------------------------- | -------------- |\n  | Europe (Ireland)           | eu-west-1      |\n  | Europe (London)            | eu-west-2      |\n  | Europe (Frankfurt)         | eu-central-1   |\n  | Europe (Milan)             | eu-south-1     |\n  | Europe (Paris)             | eu-west-3      |\n  | Europe (Stockholm)         | eu-north-1     |\n  | US East (Ohio)             | us-east-2      |\n  | US East (N. Virginia)      | us-east-1      |\n  | US West (N. California)    | us-west-1      |\n  | US West (Oregon)           | us-west-2      |\n  | Canada (Central)           | ca-central-1   |\n  | Africa (Cape Town)         | af-south-1     |\n  | Asia Pacific (Hong Kong)   | ap-east-1      |\n  | Asia Pacific (Mumbai)      | ap-south-1     |\n  | Asia Pacific (Osaka-Local) | ap-northeast-3 |\n  | Asia Pacific (Seoul)       | ap-northeast-2 |\n  | Asia Pacific (Singapore)   | ap-southeast-1 |\n  | Asia Pacific (Sydney)      | ap-southeast-2 |\n  | Asia Pacific (Tokyo)       | ap-northeast-1 |\n  | China (Beijing)            | cn-north-1     |\n  | China (Ningxia)            | cn-northwest-1 |\n  | Middle East (Bahrain)      | me-south-1     |\n  | South America (São Paulo)  | sa-east-1      |\n\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eDeploy using AWS CodeBuild pipeline\u003c/summary\u003e\n\n\u003cbr /\u003e\n\nDeployment using AWS CodeBuild will build and deploy your application inside [AWS CodeBuild pipeline](https://aws.amazon.com/codebuild/). To perform the deployment, use\n\n```bash\nstacktape codebuild:deploy --stage \u003c\u003cstage\u003e\u003e --region \u003c\u003cregion\u003e\u003e --projectName \u003c\u003cproject-name\u003e\u003e\n```\n\n`stage` is an arbitrary name of your environment (for example **staging**, **production** or **dev-john**)\n\n`region` is the AWS region, where your stack will be deployed to. All the available regions are listed below.\n\n`projectName` is the name of your project. You can create it in the console or interactively using CLI.\n\n\u003cbr /\u003e\n\n| Region name \u0026 Location     | code           |\n  | -------------------------- | -------------- |\n  | Europe (Ireland)           | eu-west-1      |\n  | Europe (London)            | eu-west-2      |\n  | Europe (Frankfurt)         | eu-central-1   |\n  | Europe (Milan)             | eu-south-1     |\n  | Europe (Paris)             | eu-west-3      |\n  | Europe (Stockholm)         | eu-north-1     |\n  | US East (Ohio)             | us-east-2      |\n  | US East (N. Virginia)      | us-east-1      |\n  | US West (N. California)    | us-west-1      |\n  | US West (Oregon)           | us-west-2      |\n  | Canada (Central)           | ca-central-1   |\n  | Africa (Cape Town)         | af-south-1     |\n  | Asia Pacific (Hong Kong)   | ap-east-1      |\n  | Asia Pacific (Mumbai)      | ap-south-1     |\n  | Asia Pacific (Osaka-Local) | ap-northeast-3 |\n  | Asia Pacific (Seoul)       | ap-northeast-2 |\n  | Asia Pacific (Singapore)   | ap-southeast-1 |\n  | Asia Pacific (Sydney)      | ap-southeast-2 |\n  | Asia Pacific (Tokyo)       | ap-northeast-1 |\n  | China (Beijing)            | cn-north-1     |\n  | China (Ningxia)            | cn-northwest-1 |\n  | Middle East (Bahrain)      | me-south-1     |\n  | South America (São Paulo)  | sa-east-1      |\n\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eDeploy using Github actions CI/CD pipeline\u003c/summary\u003e\n\n\u003cbr /\u003e\n\n1. If you don't have one, create a new repository at https://github.com/new\n2. Create Github repository secrets: https://docs.stacktape.com/user-guides/ci-cd/#2-create-github-repository-secrets\n3. Replace `\u003c\u003cstage\u003e\u003e` and `\u003c\u003cregion\u003e\u003e` in the .github/workflows/deploy.yml file.\n4. `git init --initial-branch=main`\n5. `git add .`\n6. `git commit -m \"setup stacktape project\"`\n7. `git remote add origin git@github.com:\u003c\u003cnamespace-name\u003e\u003e/\u003c\u003crepo-name\u003e\u003e.git`\n8. `git push -u origin main`\n9. To monitor the deployment progress, navigate to your github project and select the Actions tab\n\n`stage` is an arbitrary name of your environment (for example **staging**, **production** or **dev-john**)\n\n`region` is the AWS region, where your stack will be deployed to. All the available regions are listed below.\n\n`projectName` is the name of your project. You can create it in the console or interactively using CLI.\n\n\u003cbr /\u003e\n\n| Region name \u0026 Location     | code           |\n  | -------------------------- | -------------- |\n  | Europe (Ireland)           | eu-west-1      |\n  | Europe (London)            | eu-west-2      |\n  | Europe (Frankfurt)         | eu-central-1   |\n  | Europe (Milan)             | eu-south-1     |\n  | Europe (Paris)             | eu-west-3      |\n  | Europe (Stockholm)         | eu-north-1     |\n  | US East (Ohio)             | us-east-2      |\n  | US East (N. Virginia)      | us-east-1      |\n  | US West (N. California)    | us-west-1      |\n  | US West (Oregon)           | us-west-2      |\n  | Canada (Central)           | ca-central-1   |\n  | Africa (Cape Town)         | af-south-1     |\n  | Asia Pacific (Hong Kong)   | ap-east-1      |\n  | Asia Pacific (Mumbai)      | ap-south-1     |\n  | Asia Pacific (Osaka-Local) | ap-northeast-3 |\n  | Asia Pacific (Seoul)       | ap-northeast-2 |\n  | Asia Pacific (Singapore)   | ap-southeast-1 |\n  | Asia Pacific (Sydney)      | ap-southeast-2 |\n  | Asia Pacific (Tokyo)       | ap-northeast-1 |\n  | China (Beijing)            | cn-north-1     |\n  | China (Ningxia)            | cn-northwest-1 |\n  | Middle East (Bahrain)      | me-south-1     |\n  | South America (São Paulo)  | sa-east-1      |\n\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eDeploy using Gitlab CI pipeline\u003c/summary\u003e\n\n\u003cbr /\u003e\n\n1. If you don't have one, create a new repository at https://gitlab.com/projects/new\n2. Create Gitlab repository secrets: https://docs.stacktape.com/user-guides/ci-cd/#2-create-gitlab-repository-secrets\n3. replace `\u003c\u003cstage\u003e\u003e` and `\u003c\u003cregion\u003e\u003e` in the .gitlab-ci.yml file.\n4. `git init --initial-branch=main`\n5. `git add .`\n6. `git commit -m \"setup stacktape project\"`\n7. `git remote add origin git@gitlab.com:\u003c\u003cnamespace-name\u003e\u003e/\u003c\u003crepo-name\u003e\u003e.git`\n8. `git push -u origin main`\n9. `To monitor the deployment progress, navigate to your gitlab project and select CI/CD-\u003ejobs`\n\n`stage` is an arbitrary name of your environment (for example **staging**, **production** or **dev-john**)\n\n`region` is the AWS region, where your stack will be deployed to. All the available regions are listed below.\n\n`projectName` is the name of your project. You can create it in the console or interactively using CLI.\n\n\u003cbr /\u003e\n\n| Region name \u0026 Location     | code           |\n  | -------------------------- | -------------- |\n  | Europe (Ireland)           | eu-west-1      |\n  | Europe (London)            | eu-west-2      |\n  | Europe (Frankfurt)         | eu-central-1   |\n  | Europe (Milan)             | eu-south-1     |\n  | Europe (Paris)             | eu-west-3      |\n  | Europe (Stockholm)         | eu-north-1     |\n  | US East (Ohio)             | us-east-2      |\n  | US East (N. Virginia)      | us-east-1      |\n  | US West (N. California)    | us-west-1      |\n  | US West (Oregon)           | us-west-2      |\n  | Canada (Central)           | ca-central-1   |\n  | Africa (Cape Town)         | af-south-1     |\n  | Asia Pacific (Hong Kong)   | ap-east-1      |\n  | Asia Pacific (Mumbai)      | ap-south-1     |\n  | Asia Pacific (Osaka-Local) | ap-northeast-3 |\n  | Asia Pacific (Seoul)       | ap-northeast-2 |\n  | Asia Pacific (Singapore)   | ap-southeast-1 |\n  | Asia Pacific (Sydney)      | ap-southeast-2 |\n  | Asia Pacific (Tokyo)       | ap-northeast-1 |\n  | China (Beijing)            | cn-north-1     |\n  | China (Ningxia)            | cn-northwest-1 |\n  | Middle East (Bahrain)      | me-south-1     |\n  | South America (São Paulo)  | sa-east-1      |\n\n\u003c/details\u003e\n\n## 4. Test your application\n\nAfter a successful deployment, some information about the stack will be printed to the terminal (**URLs** of the deployed services, links to **logs**, **metrics**, etc.).\n\nTo test the application, you will need the web service URL. It's printed to the terminal.\n\n### Create a post\nMake a `POST` request to `\u003c\u003cweb_service_url\u003e\u003e/post` with the JSON data in its body to save the post. Use your preferred HTTP client or\nthe following cURL command:\n\n```bash\ncurl -X POST \u003c\u003cweb_service_url\u003e\u003e/posts -H 'content-type: application/json' -d '{ \"title\": \"MyPost\", \"content\": \"Hello!\", \"authorEmail\": \"info@stacktape.com\"}'\n```\n\nIf the above cURL command did not work, try escaping the JSON content:\n\n```bash\ncurl -X POST \u003c\u003cweb_service_url\u003e\u003e/posts -H 'content-type: application/json' -d '{ \\\"title\\\":\\\"MyPost\\\",\\\"content\\\":\\\"Hello!\\\",\\\"authorEmail\\\":\\\"info@stacktape.com\\\"}'\n```\n\n### Get all posts\n\nMake a `GET` request to `\u003c\u003cweb_service_url\u003e\u003e/posts` to get all posts.\n\n```bash\ncurl \u003c\u003cweb_service_url\u003e\u003e/posts\n```\n\n## 5. Run the application in development mode\nTo run the service in the development mode (locally on your machine), you can use the\n[dev command](https://docs.stacktape.com/cli/commands/dev/).\n\n```bash\nstacktape dev --region \u003c\u003cyour-region\u003e\u003e --stage \u003c\u003cstage\u003e\u003e --resourceName webService\n```\n\nStacktape runs the container as closely to the deployed version as possible:\n\n- Maps container ports to the host machine.\n- Injects parameters referenced in the environment variables by `$ResourceParam` and `$Secret` directives to the\n  running container.\n- Injects credentials of the [assumed role](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) to\n  the container. This means that your locally running container will have the exact same IAM permissions as the deployed\n  version.\n- Pretty-prints logs (stdout/stderr) produced by the container to the terminal.\n\n\u003cbr /\u003e\n\nThe container is rebuilt and restarted, when you either:\n\n- type `rs + enter` to the terminal\n- use the `--watch` option and one of your source code files changes\n\n## 6. Hotswap deploys\n- Stacktape deployments use [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) under the hood. It\n  brings a lot of guarantees and convenience, but can be slow for certain use-cases.\n\n- To speed up the deployment, you can use the `--hotSwap` flag which avoids using Cloudformation.\n- Hotswap deployments work only for source code changes (for lambda function, containers and batch jobs) and for content uploads to buckets.\n- If the update deployment is not hot-swappable, Stacktape will automatically fall back to using a Cloudformation deployment.\n```bash\nstacktape deploy --hotSwap --stage \u003c\u003cstage\u003e\u003e --region \u003c\u003cregion\u003e\u003e --projectName \u003c\u003cproject-name\u003e\u003e\n```\n\n## 7. Delete your stack\n\n- If you no longer want to use your stack, you can delete it.\n- Stacktape will automatically delete every infrastructure resource and deployment artifact associated with your stack.\n\n```bash\nstacktape delete --stage \u003c\u003cstage\u003e\u003e --region \u003c\u003cregion\u003e\u003e\n```\n\n# Stack description\n\n  Stacktape uses a simple `stacktape.yml` configuration file to describe infrastructure resources, packaging, deployment\n  pipeline and other aspects of your project.\n\n  You can deploy your project to multiple environments (stages) - for\n  example `production`, `staging` or `dev-john`. A stack is a running instance of an project. It consists of your application\n  code (if any) and the infrastructure resources required to run it.\n\n  The configuration for this project is described below.\n\n  ## 1. Resources\n\n  - Every resource must have an arbitrary, alphanumeric name (A-z0-9).\n  - Stacktape resources consist of multiple underlying AWS or 3rd party resources.\n### 1.1 Web Service\n\nApplication runs in web-service resource and is configured as follows:\n\n- **Packaging** - determines how the Docker container image is built. The easiest and most optimized way to build the\n  image for a Typescript application is using `stacktape-image-buildpack`. We only need to configure `entryfilePath`.\n  Stacktape automatically transpiles and builds the application code with all of its dependencies, builds the Docker\n  image, and pushes it to a pre-created image repository on AWS. You can also use\n  [other types of packaging](https://docs.stacktape.com/configuration/packaging/#packaging-web-services).\n- **ConnectTo list** - we are adding database `mainDatabase` into `connectTo` list. By doing this, Stacktape will\n  automatically inject relevant environment variables into the container runtime (such as the connection string required\n  to connect to the database)\n- [Resources](https://docs.stacktape.com/compute-resources/web-services#resources). The cheapest available resource\n  configuration is `0.25` of virtual CPU and `512` MB of RAM.\n- For convenience, automatic CORS is enabled.\n\nYou can also configure [scaling](https://docs.stacktape.com/compute-resources/web-services#scaling). New (parallel)\ncontainer can be added when (for example) the utilization of your CPU or RAM gets larger than 80%. The traffic is evenly\ndistributed to all the containers.\n\n```yml\nresources:\n  webService:\n    type: web-service\n    properties:\n      packaging:\n        type: stacktape-image-buildpack\n        properties:\n          entryfilePath: ./src/index.ts\n      resources:\n        cpu: 0.25\n        memory: 512\n      connectTo:\n        - mainDatabase\n      cors:\n        enabled: true\n```\n\n### 1.2 MongoDB Atlas cluster\n\nThe application data is stored in an Atlas MongoDB cluster.\n\nOnly the cluster tier needs to be configured in a minimal setup. You can also configure\n[other properties](https://docs.stacktape.com/3rd-party-resources/mongo-db-atlas-clusters/) if desired.\n\n```yml\nmongoDbCluster:\n  type: mongo-db-atlas-cluster\n  properties:\n    clusterTier: M2\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstacktape%2Fstarter-expressjs-api-mongo-db","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstacktape%2Fstarter-expressjs-api-mongo-db","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstacktape%2Fstarter-expressjs-api-mongo-db/lists"}