我正在尝试从本地主机发布到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应用程序未检测到来自本地主机的发帖请求。我该怎么办?
答案 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");
});
别忘了进行更改后重新启动服务器。