![](/img/trans.png)
[英]Express App.error doesn't work with Node.js 0.8.0 What should I do
[英]Node.js app doesn't work when I try to host it via GCP deploy command. Error: Cannot find module 'express'
我的 NodeJS 应用程序使用 TypeScript 编写并基于 Express 框架。 我想使用gcloud app deploy
命令gcloud app deploy
它托管在 GCP 云中。 所以,首先,我将我的 TS 源构建为 JavaScript - 这是正确的做法吗?。
然后从build
(带有 JS 源代码)文件夹中,我尝试运行npm start
命令并且它成功运行,我也可以使用预览检查它:
它运作良好。 到现在为止还挺好。
然后我从build
文件夹(内置到 JS 源)运行gcloud app deploy
并且在部署过程中我没有看到任何错误。
但之后,每当我尝试访问已部署的应用程序时,每个请求都会收到 500 错误。 我查看了一个日志,我看到了下一个错误:
Error: Cannot find module 'express'
似乎是什么问题?
我在build
文件夹中尝试了下一个命令:
npm install
npm install express --save
npm install -g express
sudo apt-get install node-express
没有什么对我有用。
这是我的package.json
文件:
{
"name": "full-node",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"build": "tsc",
"dev": "node -r ts-node/register ./src/server.ts",
"debug": "ts-node --inspect ./src/server.ts",
"start": "node build/server.js",
"prod": "npm run build && npm run start"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"ts-node": "^7.0.1",
"typescript": "^3.0.1"
},
"dependencies": {
"@types/lodash": "^4.14.116",
"body-parser": "^1.18.3",
"connect": "^3.6.6",
"cors": "^2.8.4",
"crypto": "^1.0.1",
"express": "^4.16.3",
"firebase-admin": "^6.0.0",
"lodash": "^4.17.10"
}
}
知道我错过了什么吗? 这是将使用 TypeScript 编写的应用程序部署到 GCP 云的正确方法吗?
app.yaml
:
# [START app_yaml]
runtime: nodejs8
# [END app_yaml]
由于您正在构建文件夹中运行 gcloud app deploy,可能 package.json 未部署,因为 npm install 首先由应用引擎运行,因此不可能缺少 express。您可以转到 gcp 控制台并在应用引擎视图下版本,然后在诊断下,您可以查看源文件(实际部署到应用程序引擎的文件)。请记住,这仅适用于标准版本,不适用于 flex。我可以从您的 app.yaml 中看到您是使用标准。如果缺少某些文件,则转到您的应用程序根目录,在您的 .gcloudignore 文件中,您可以忽略您不想部署的文件/文件夹。然后从项目的根目录中运行 gcloud app deploy
问题很简单。 似乎gcloud app deploy
使用npm run build & npm run start
命令在内部某处启动应用程序。 要托管在 TS 上编写的 Node.Js,我们需要使用tsc
命令将其构建为简单的 JS。 然后在build
文件夹中重写package.json
文件以使用正确的命令。 看看我的启动命令: "start": "node build/server.js"
。 我也在build
文件夹中使用它,这意味着gcloud
命令正在/build/build/
文件夹中搜索。 我已将start
命令更改为"start": "node server.js"
,然后一切正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.