【问题标题】:Express.js net::ERR_CONNECTION_CLOSEDExpress.js 网络::ERR_CONNECTION_CLOSED
【发布时间】:2017-06-09 23:59:13
【问题描述】:

我正在 Heroku 上运行通用 Javascript 应用程序。

Express.js 正在加载我的 Vue.js 应用程序,并且请求被代理到 https://localhost:3000/api

我正在尝试向端点发出简单的 POST 请求,但是 Chrome 上的控制台会打印出来:

OPTIONS https://localhost:3000/api net::ERR_CONNECTION_CLOSED

这是我的快递服务器:

import express from 'express'
import cors from 'cors'
import bodyParser from 'body-parser'
import path from 'path'
import mongoose from 'mongoose'
import routes from './routes'

mongoose.connect('mongodb://coolAddress');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', () => {
  console.log("mongoose connected")
})

const app = express()

const port = 3000

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cors())
app.use(express.static(path.resolve(__dirname, '../coolClient/dist')));

app.use('/api', routes)

app.all('*', (req, res) => {
  res.sendFile(path.resolve(__dirname, '../coolClient/dist', 'index.html'));
})

app.listen(process.env.PORT || port, () => {
  console.log(`App listening on ${process.env.PORT || port}`)
})

我怀疑这可能与 SSL 配置有关。谷歌搜索这个问题会带来这种可能性,但并没有提供太多的调试方法。

有什么想法吗?

【问题讨论】:

  • 如果您需要帮助,请显示一些代码,尤其是您的快速应用设置。
  • @Paul 好的编辑。任何想法如何解决这个问题?
  • 我对你的架构还不是很清楚。你的应用是在 heroku 上,还是在 localhost 上?
  • @Paul 我的客户端应用程序和 API 服务器都托管在 Heroku 上。 API 服务器为客户端应用本身提供服务
  • 并且错误是在客户端还是在服务器上?

标签: javascript express heroku vue.js


【解决方案1】:

好的,所以从 cmets 来看,有几件事要看。

1) “本地主机”表示您的计算机。如果您的客户端代码试图实现这一目标,则需要在您的机器上运行一个服务器并为您的服务器端代码提供服务。您绝对需要有一个可通过网络访问的域名(例如 heroku 为您提供的一个:app-name.herokuapp.com),以便能够在托管在 heroku(或任何其他网络主机)上时访问您的服务器端代码。

2) 如果要使用 HTTPS,则必须购买并安装 SSL 证书。它不适用于 herokuapp 域,因此您还需要购买一个域名并自行设置。所有这些都在 heroku 文档中进行了解释:https://devcenter.heroku.com/articles/ssl-endpoint

希望对您有所帮助。

【讨论】:

  • 是的,我完全误解了 localhost 的相对性。完全脑洞大开的atm。感谢您的信息。
  • :) 我可以为我的另一个问题收获一些你的智慧吗? stackoverflow.com/questions/41843836/…@保罗
  • 这很有趣,我在看到你问我之前就问了这个问题
【解决方案2】:

我发现 ssl 请求在我的 Centos6.9 上工作起来就像一个魅力

  • 在您的服务器上安装 virtualmin
  • 设置让我们加密
  • 请参考

在您致电之前
var app = express();
或任何其他 http(s) 机制或app.listen(port),

  var options = {
    key: fs.readFileSync('/home/yourdomain/ssl.key'),
    cert: fs.readFileSync('/home/domain/ssl.cert'),
  };

注意:您必须考虑“无访问控制允许来源”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 2019-01-28
    • 2016-09-22
    • 2021-10-10
    • 1970-01-01
    • 2019-08-08
    • 2022-01-02
    相关资源
    最近更新 更多