node.js - Heroku at=error code=H10 desc="App 崩溃"
问题描述
当我尝试在 heroku 上访问我的 api 时出现此错误
我有 nodejs、typescript、typeORM 和 Postgresql 使用数据库的项目。
我的项目的链接:https ://github.com/WesleyIsr4/tarefas_api/tree/main/tasks_api
2021-03-24T23:42:04.841420+00:00 heroku[web.1]: Starting process with command `npm start`
2021-03-24T23:42:06.805718+00:00 app[web.1]:
2021-03-24T23:42:06.805731+00:00 app[web.1]: > tasks_api@0.0.1 start /app
2021-03-24T23:42:06.805731+00:00 app[web.1]: > node src/index.ts
2021-03-24T23:42:06.805731+00:00 app[web.1]:
2021-03-24T23:42:06.871406+00:00 app[web.1]: (node:21) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
2021-03-24T23:42:06.871407+00:00 app[web.1]: (Use `node --trace-warnings ...` to show where the warning was created)
2021-03-24T23:42:06.874166+00:00 app[web.1]: /app/src/index.ts:1
2021-03-24T23:42:06.874166+00:00 app[web.1]: import "reflect-metadata";
2021-03-24T23:42:06.874167+00:00 app[web.1]: ^^^^^^
2021-03-24T23:42:06.874167+00:00 app[web.1]:
2021-03-24T23:42:06.874168+00:00 app[web.1]: SyntaxError: Cannot use import statement outside a module
2021-03-24T23:42:06.874168+00:00 app[web.1]: at wrapSafe (internal/modules/cjs/loader.js:979:16)
2021-03-24T23:42:06.874169+00:00 app[web.1]: at Module._compile (internal/modules/cjs/loader.js:1027:27)
2021-03-24T23:42:06.874169+00:00 app[web.1]: at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
2021-03-24T23:42:06.874170+00:00 app[web.1]: at Module.load (internal/modules/cjs/loader.js:928:32)
2021-03-24T23:42:06.874170+00:00 app[web.1]: at Function.Module._load (internal/modules/cjs/loader.js:769:14)
2021-03-24T23:42:06.874171+00:00 app[web.1]: at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
2021-03-24T23:42:06.874171+00:00 app[web.1]: at internal/main/run_main_module.js:17:47
2021-03-24T23:42:06.889434+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2021-03-24T23:42:06.889834+00:00 app[web.1]: npm ERR! errno 1
2021-03-24T23:42:06.896276+00:00 app[web.1]: npm ERR! tasks_api@0.0.1 start: `node src/index.ts`
2021-03-24T23:42:06.896419+00:00 app[web.1]: npm ERR! Exit status 1
2021-03-24T23:42:06.896567+00:00 app[web.1]: npm ERR!
2021-03-24T23:42:06.896657+00:00 app[web.1]: npm ERR! Failed at the tasks_api@0.0.1 start script.
2021-03-24T23:42:06.896771+00:00 app[web.1]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
2021-03-24T23:42:06.905764+00:00 app[web.1]:
2021-03-24T23:42:06.906023+00:00 app[web.1]: npm ERR! A complete log of this run can be found in:
2021-03-24T23:42:06.906187+00:00 app[web.1]: npm ERR! /app/.npm/_logs/2021-03-24T23_42_06_897Z-debug.log
2021-03-24T23:42:06.952487+00:00 heroku[web.1]: Process exited with status 1
2021-03-24T23:42:07.022497+00:00 heroku[web.1]: State changed from starting to crashed
2021-03-24T23:42:07.716132+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=taskedapi.herokuapp.com request_id=cb3a7f47-103e-408d-874b-c0e3466eead5 fwd="177.37.210.66" dyno= connect= service= status=503 bytes= protocol=https
2021-03-24T23:42:08.350324+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=taskedapi.herokuapp.com request_id=ead9cb26-9b21-4d6e-9630-70b13306d777 fwd="177.37.210.66" dyno= connect= service= status=503 bytes= protocol=https
解决方案
对于在这里跳伞的每个人...
在您的 package.json 中,您必须将脚本更改为:
"scripts": {
"build": "tsc",
"start": "node dist/server.js",
...other scripts may be put here too
},
部署后,heroku 将执行构建脚本,将您的 typescript 转换为 javascript,然后执行启动脚本。请注意,启动脚本将运行您的.js文件,而不是原始的.ts。
重要的是要说启动脚本必须指向在dist文件夹中找到的 server.js 文件(在部署期间创建),而不是指向src文件夹中的 server.ts 。
Heroku 文档说您也必须在 package.json 中放置一个主键,如下所示:
"main": "server.js",
"license": "MIT",
"scripts": {
...
我对 OP 的回答可能会迟到,但可以补充@Jim 的回答
推荐阅读
- python - 将整个函数作为字符串 / 并将字符串转换为函数?
- swift - 无法使用 ViewModel 加载数据
- scala - 当状态满足某些条件时如何停止状态转换?
- ruby-on-rails - Heroku 拒绝来自 Ruby on Rails 应用程序的推送
- vba - VBLOOKUP 和 MATCH 识别列中的问题
- django - Django rest 框架 serializer.errors 输出 ["This field is required."] 与 multipart/form-data 发布请求
- node.js - SAP 全栈 Web IDE 构建错误
- laravel-5.4 - 如何在 Laravel 5.4 中更新多个图像并删除旧图像?
- vba - 根据值将行中的数据汇总到列中 - 而不是简单地转置
- c# - Twilio 功能读取多个语音输入