如何在heroku应用中发出发布请求

时间:2019-08-06 09:51:17

标签: node.js heroku

我正在尝试从本地主机发布到Heroku。这是JavaScript本地服务器上的示例脚本:

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

axios.post('https://thawing-meadow-45314.herokuapp.com', {}).then(res =>{ //perform operation }) .catch(err=>{ // handel error here. })

这是在Heroku上运行的Node.js脚本:

const express = require('express');
const app = express();
const cors = require("cors");
app.use(cors());

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

app.post('/', (req, res) => {

  console.log('message is delivered');

}); //app.post

const port = process.env.PORT || 3081;

app.listen(port, () => {
  console.log(`Server running on port${port}`);
});

在命令行上,我使用三个命令:

Heroku login 
Heroku run bash
node index.js 

问题是什么也没发生。 Heroku应用程序未检测到来自本地主机的发帖请求。我该怎么办?

2 个答案:

答案 0 :(得分:0)

axios.post('https://thawing-meadow-45314.herokuapp.com:55058', {})

不要发布到端口Heroku通过PORT环境变量给您。

这是您的应用程序需要绑定的内部端口,但这是公开显示为标准端口80和443。将端口完全排除在外:

axios.post('https://thawing-meadow-45314.herokuapp.com', {})

也不要这样做:

  

在命令行上,我使用三个命令:

heroku login
heroku run bash
node index.js

您的服务器应通过start中的package.json脚本(或Procfile中给出的自定义命令)自动启动。像

"scripts": {
  "start": "node index.js"
}
您的package.json中的

应该这样做。 Heroku测功机经常重新启动,因此它们可以自行启动很重要。

答案 1 :(得分:0)

从Axios请求URL中删除端口。

axios.post('https://thawing-meadow-45314.herokuapp.com', {}).then(res =>{
//perform operation
})
.catch(err=>{
// handel error here.
})

此外,请确保已在服务器上启用了CORS。如果您不使用cors module,我建议您使用它,并将其添加到应用中间件中,如下所示:

const express = require("express");
const app = express();
const cors = require("cors");

app.use(cors());

app.post("/", (req, res) => {
  // perform operation and return response.
  res.status(200).json({ message: "It worked!" });
});

app.listen(3000, function() {
    console.log("server is running");
  });

别忘了进行更改后重新启动服务器。