数字海洋托管的node.js / express应用显示无法获取/错误

时间:2018-11-03 21:06:37

标签: javascript node.js express digital-ocean

在网上浏览并看到针对不同情况的无数不同答案之后,我仍然找不到适合我的解决方案。当我尝试在本地运行server.js文件时,它可以正常运行。但是,当我复制存储库并尝试在其Droplet中运行它时,出现此错误:

Cannot GET /

以下是我的server.js代码:

const express = require('express')
const path = require('path')
const history = require('connect-history-api-fallback')

const app = express()

const staticFileMiddleware = express.static(path.join(__dirname + '/dist'))

app.use(staticFileMiddleware)
app.use(history({
  disableDotRule: true,
  verbose: true
}))
app.use(staticFileMiddleware)

app.get('/', function (req, res) {
  res.render(path.join(__dirname + '/dist/index.html'))
})

var server = app.listen(process.env.PORT || 80, function () {
  var port = server.address().port
  console.log('App now running on port', port);
  console.log(path.join(__dirname + '/dist/index.html'));
})

2 个答案:

答案 0 :(得分:0)

我建议从做一个自动生成的快递项目开始:

npm install -g express-generator
express --view=jade new-project-folder-name

...如果您这样做,那么DEBUG=* node bin/www将在启用所有调试的情况下在端口3000上启动项目。

实际上,您实际上可能并不希望在端口80上启动Express项目,而是希望使用适当的Web服务器(例如Nginx或Apache),然后将其配置为Express的反向代理。本地端口(例如3000)上的应用程序。还可以使用UFW减少服务器的安全表面积。

这样,您还可以使用Lets Encrypt来让Web服务器管理所有SSL业务,而让您的快速应用程序只担心其业务。

不过,首先,请尝试在端口3000上启动您的项目,并在http://your-ip-address:3000上访问该站点,看看是否得到不同的结果。如果这样做,您可能需要使用互联网来拼凑一个类似于我上面所描述的解决方案的解决方案。在这方面,Digital Ocean教程非常出色。

答案 1 :(得分:0)

问题是,当我克隆存储库时,它没有推送dist文件夹。因此,解决我的问题的方法是创建一个单独的存储库,然后手动推送dist文件夹。然后,我使用此仓库在我的Droplet上投放了我的应用。