首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在GAE中发布nestjs应用程序

在GAE中发布nestjs应用程序
EN

Stack Overflow用户
提问于 2018-07-22 16:00:33
回答 2查看 7.7K关注 0票数 11

我正在学习nestjs,我跟踪了这个循序渐进

应用程序工作正常。但是我想在我的GAE中把它作为一个微服务发布。我也能很好地完成这个部分,但是当我调用GPC中的地址时,我得到的是错误502 -坏网关。

我相信这是我的package.json文件中的一些东西。但我还没弄明白。以下是依赖项配置:

代码语言:javascript
复制
   "dependencies": {
   "@ nestjs / common": "^ 5.0.0",
   "@ nestjs / core": "^ 5.0.0",
   "@ nestjs / microservices": "^ 5.0.0",
   "@ nestjs / testing": "^ 5.0.0",
   "@ nestjs / websockets": "^ 5.0.0",
   "reflect-metadata": "^ 0.1.12",
   "rxjs": "^ 6.0.0",
   "typescript": "^ 2.8.0",
   "ts-node": "^ 6.0.0",
   "tsconfig-paths": "^ 3.3.1"
   },

这是我的起始指令:

代码语言:javascript
复制
"start": "ts-node -r tsconfig-paths/register src/main.ts",

最后,我的app.yaml:

代码语言:javascript
复制
env: flex 
runtime: nodejs 
service: nestapp
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-30 02:19:56

您可以从AppEngine类型记录示例项目开始:

https://github.com/GoogleCloudPlatform/nodejs-docs-samples/tree/master/appengine/typescript

它已经安装了所有的类型记录编译工具。在您的package.json脚本中需要的关键行是:

代码语言:javascript
复制
"build": "tsc -p tsconfig.build.json",
"gcp-build": "npm run build"

"gcp-build"是一个保留的任务名,它总是在部署AppEngine NodeJS项目时执行。这将确保在部署时将TypeScript编译为JavaScript。你可以在这里读到更多关于它的内容:

https://cloud.google.com/appengine/docs/standard/nodejs/running-custom-build-step

一旦您运行TypeScript和Express,您可以用Nest替换Express!您还需要更改package.json中的入口点,AppEngine用于运行应用程序的入口点:

代码语言:javascript
复制
"main": "dist/main.js",

您的Nest应用程序src/main.ts中的端口:

代码语言:javascript
复制
const PORT = Number(process.env.PORT) || 8080;
await app.listen(PORT);

在您的app.yaml删除env: flex只使用标准环境,它更便宜!

代码语言:javascript
复制
runtime: nodejs10

将所有这些放在一起,您的完整package.json将如下所示:

代码语言:javascript
复制
{
  "name": "appengine-nest",
  "description": "An example TypeScript app running on Google App Engine.",
  "version": "0.0.1",
  "author": "kmturley",
  "license": "MIT",
  "engines": {
    "node": ">=8.0.0"
  },
  "main": "dist/main.js",
  "scripts": {
    "prepare": "npm run build",
    "pretest": "npm run build",
    "build": "tsc -p tsconfig.build.json",
    "deploy": "gcloud app deploy",
    "lint": "tslint -p tsconfig.json -c tslint.json",
    "start": "node ./dist/main.js",
    "start:dev": "nodemon",
    "start:debug": "nodemon --config nodemon-debug.json",
    "test": "repo-tools test app -- dist/main.js",
    "gcp-build": "npm run build"
  },
  "dependencies": {
    "@nestjs/common": "^5.6.2",
    "@nestjs/core": "^5.6.2",
    "express": "^4.16.3",
    "nodemon": "^1.18.9",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^6.3.3",
    "ts-node": "^8.0.2",
    "tsconfig-paths": "^3.7.0",
    "typescript": "^3.0.1"
  },
  "devDependencies": {
    "@google-cloud/nodejs-repo-tools": "^3.0.0",
    "@types/express": "^4.16.0",
    "tslint": "^5.11.0"
  }
}

我在这里创建了一个示例项目:

https://github.com/kmturley/appengine-nest-angular

票数 25
EN

Stack Overflow用户

发布于 2021-05-03 16:42:28

所需更改

代码语言:javascript
复制
nest new <project>

包括:

package.json (主属性和一些脚本)

代码语言:javascript
复制
{
    ...
+  "main": "dist/main.js",
   "scripts": {
...
-    "build": "nest build",
+    "build": "tsc -p tsconfig.build.json",
+    "gcp-build": "npm run build",
...
-    "start": "nest start",
+    "start": "node ./dist/main.js",    
   }
...
}

src/main.ts (添加要侦听的端口环境变量)

代码语言:javascript
复制
async function bootstrap() {
   const app = await NestFactory.create(AppModule);
-  await app.listen(3000);
+  const PORT = Number(process.env.PORT) || 8080;
+  await app.listen(PORT);
 }
 bootstrap();

此外,它还建议在package.json脚本上添加部署脚本

使用devDependency @google/nodejs-回购工具

代码语言:javascript
复制
 +    "deploy": "gcloud app deploy"

注意:解决方案是@Kim T,我只是以这种方式添加了它,因为读取和执行它很麻烦。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51466859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档