NodeJS 不能在 Heroku 上运行,但可以在 localhost 上运行

Posted

技术标签:

【中文标题】NodeJS 不能在 Heroku 上运行,但可以在 localhost 上运行【英文标题】:NodeJS doesn't work on Heroku but work at localhost 【发布时间】:2021-11-23 11:54:19 【问题描述】:

我向 Heroku 部署了一个简单的快速 NodeJS 应用程序,但它不起作用,

它能够加载根 URL:https://fathomless-bayou-36989.herokuapp.com/,但不能加载像 https://fathomless-bayou-36989.herokuapp.com/token 这样的其他 URL。它返回 503 错误。

这是我的 app.js:

const express = require('express');
const mongoose = require('mongoose');
const dotenv = require('dotenv');

const app = express();

app.use(express.json());
app.use(express.urlencoded( extends:true ));

app.get("/", function (req, res) 
    res.send("<h1>Hello There!</h1><p>This is server to save token for Dyad app by Dai Vuong.</p>")
)

dotenv.config ();

mongoose.connect(process.env.MONGODB_URI, 
    useNewUrlParser: true,
    useUnifiedTopology: true,
);

// Token Object
const Token = mongoose.model('token', new mongoose.Schema (
    
        number:  type: Number, default: 100,
        tokenID: String,
    
));

// Get all tokens
app.get('/token', async (req, res) => 
    const tokens = await Token.find()
    res.send(tokens);
)

// Get token by number
app.get('/token/:number', async (req, res) => 
    const tokens = await Token.find(number:req.params.number)
    res.send(tokens);
)

// Add new token
app.post('/token', async (req, res) => 
    const lastToken = await Token.find().sort( number: -1 ).limit(1);
    const lastNumber = lastToken.length === 0  ? 0 : lastToken[0].number;
    if (!req.body.token)
        return res.send( message: 'Data is required.');
    
    const token = await Token( ...req.body, number: lastNumber + 1 ).save();
    res.send(token);
);


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

app.listen(port, () => 
    console.log(`Serve running at port:$port`);
);

这是我的 package.json:


  "name": "DyadServer",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": 
    "start": "node app.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  ,
  "keywords": [],
  "author": "Dai Vuong",
  "license": "ISC",
  "dependencies": 
    "dotenv": "^10.0.0",
    "express": "^4.17.1",
    "mongoose": "^6.0.8"
  

我试着像人们说的那样添加app.yaml 我还尝试在heroku run bash 中创建.env 以添加云mongodb 数据库连接 但它仍然无法正常工作。 请帮帮我!

【问题讨论】:

【参考方案1】:

Express 会按照您在程序中注册的顺序处理 //token/token/42 等路由。

因此,您的 / 路由正在使用您对 /token 的请求。把最具体的路线放在第一位。

【讨论】:

以上是关于NodeJS 不能在 Heroku 上运行,但可以在 localhost 上运行的主要内容,如果未能解决你的问题,请参考以下文章

Streamlit 应用程序可以在本地运行,但不能在 Heroku 上运行

Node.js + Mongoose 可以在本地工作,但不能在 Heroku 上工作

我创建了一个 django 软件,它在 localhost 上运行,但不能在 heroku 上工作,它的日志显示了这个

在 Heroku 上部署 Nodejs + MongoDB,但安装插件时需要验证信用卡

如何在 Heroku 上部署项目

Nodejs 快递,Heroku CORS