Heroku NodeJS index.js文件作为响应发送而不是被执行

时间:2018-07-27 07:27:51

标签: node.js typescript express heroku

我有一个GitHub repo可以在本地为我工作,例如使用'npm start'或CLI'heroku local web',但仅在推送到dist / index.js文件时才提供内容Heroku。

该应用程序使用TypeScript并使用Gulp构建。

应用在本地运行时,转到http://localhost:5000/api/v1/wiki/magical_thinking会返回正确的描述。但是,在部署应用程序后,该应用程序具有

"start": "node dist/index.js", "postinstall": "gulp scripts"

在package.json文件中,并使用https://github.com/heroku/heroku-buildpack-nodejs buildpack,转到URL https://tyno-lrs.herokuapp.com/api/v1/wiki/magical_thinking将打印出index.js文件,而不是执行它。我找不到涵盖此行为的其他任何问题,因此任何帮助都将非常有用。

谢谢。

1 个答案:

答案 0 :(得分:0)

我相信问题出在static.json文件。您的static.json看起来像这样:

{
"root": "dist/",
"clean_urls": true,
"routes": {
    "/**": "index.js"
 }
}

什么意思:

  • root:这使您可以为应用程序目录指定其他资产根。例如,如果您使用的是ember-cli,它自然会构建一个dist /目录,因此您可能要使用该intsead。
  • clean_url:出于SEO的目的,您可以从某个博客站点的URL中删除.html扩展名。这意味着用户可以转到/ foo而不是/foo.html。
  • routes:您可以定义组合到单个文件的自定义路由。这使您可以保留单页Web应用程序的路由。 支持以下运算符:
    • 在URL中支持单个路径段。在下面的配置中,/ baz.html将匹配,但/bar/baz.html将不匹配。
    • 支持URL中的任何长度。在下面的配置中,/ route / foo和/ route / foo / bar / baz都可以使用。

routes的示例:

{
  "routes": {
    "/*.html": "index.html",
    "/route/**": "bar/baz.html"
  }
}

因此,这意味着您将index.js文件作为资产托管-这就是为什么当您输入部署的应用程序的任何站点时都会显示其内容的原因。