node.js - 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
像人们说的那样添加我也尝试创建.env
以heroku run bash
添加云 mongodb 数据库连接但它仍然无法正常工作。请帮帮我!
解决方案
Express会按照您在程序中注册它们的顺序处理诸如/
、/token
和之类的路由。/token/42
因此,您的/
路线正在消耗您对/token
. 把最具体的路线放在第一位。
推荐阅读
- python-3.x - 使用 python3 将数据从 sqlite3 转换为 csv、xml 的问题
- spring-boot - Spring Boot 与 Spring Cloud 的兼容性
- java - 切换活动时 Android Studio 崩溃
- python - python:根据数据框中的位置对特定行值求和
- jsf - 目标不可达,标识符“searchBean”解析为空
- python - 如何查看 Autogluon 训练的模型的详细信息?
- html - 对齐单选按钮引导程序
- android - 如何将活动添加到片段?[安卓工作室]
- python - 从数字字典中获取最高值作为字符串
- reactjs - 从 React.js 中的 API 调用打印对象数组