首页 > 解决方案 > NodeJS 不能在 Heroku 上工作,但可以在 localhost 上工作

问题描述

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

它能够加载根 url:https://fathomless-bayou-36989.herokuapp.com/但不能加载其他类似https://fathomless-bayou-36989.herokuapp.com/token. 它返回 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像人们说的那样添加我也尝试创建.envheroku run bash添加云 mongodb 数据库连接但它仍然无法正常工作。请帮帮我!

标签: node.jsapiexpressherokumongoose

解决方案


Express会按照您在程序中注册它们的顺序处理诸如//token和之类的路由。/token/42

因此,您的/路线正在消耗您对/token. 把最具体的路线放在第一位。


推荐阅读